我正在處理一個ActiveX控件,並且正在基於Mime類型正確實例化控件。我試圖瞭解如何檢索文件的路徑。MIME播放器Activex控件應該如何檢索文檔的路徑?
This very old (deprecated) KB article特別說:
在所有情況下的Internet Explorer傳遞文件的URL通過
IPropertyBag
接口發揮 默認播放器。也就是說,當Internet Explorer啓動播放器時,它會創建一個 IPropertyBag的實例,並將文件的URL加載到「SRC」屬性中,以 播放。然後它向玩家查詢IPersistPropertyBag,並通過IPersistPropertyBag::Load
發送IPropertyBag
實例。
我實現了這一點,但load方法永遠不會被調用。
int IPersistPropertyBag.Load(IPropertyBag pIPropertyBag, object pErrorLog)
{
object var = null;
pIPropertyBag.Read("SRC", out var, (IErrorLog)pErrorLog);
return 0;
}
還有在IBindStatusCallback::OnDataAvailable
事件wealth of information here和this article talks extensively about using BindToStorage()。我懷疑這是現在要檢索文檔的源路徑的方式,但任何確認或指導都非常感謝。
最後一點注意:控件DOES實現IObjectSafety,並且支持INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA
。
首先,感謝您的回答。我嘗試過實現'IPersistMoniker',但是我從來沒有在構造函數以外的任何函數上獲得斷點。 [這是一個包含當前代碼的pastebin](http://pastebin.com/vWkTNUUL)。關於爲什麼IPersistMoniker :: Load()永遠不會觸發的任何建議?另外,我在該控件的CLSID的'Implemented Categories'註冊表項下添加了一個'{0DE86A51-2BAA-11CF-A229-00AA003D7352}'的密鑰。我不確定這是否有必要,[這個人也不是這樣](http://stackoverflow.com/q/2070999/656243)。雖然它看起來似乎沒有必要。 –
另一個注意事項:我環視了一下,但不知道如何在c#中實現數據路徑屬性。感覺就像我需要做的不僅僅是添加一個公共屬性(即裝飾它在c#中可能不存在的屬性)。 –
@LynnCrumbling,檢查我的更新。 – Noseratio