我想在我的代碼中實現註冊表免費的COM explicilty(不能使用註冊表免費的COM通過應用程序清單,因爲它只能在exe級別):我創建一個靜態類加載COM DLL,調用DllGetClassObject,然後IClassFactory :: CreateInstance()。默認IMarshal實現?
工作得很好。實現細節在http://www.dimastr.com/redemption/security.htm#redemptionloader
但是,如果我從多個線程實例化我的COM對象(例如第一個在主線程,然後從第二個),.Net開始要求我的對象IMarshal,我沒有實現。
如果在註冊表中註冊COM庫,一切工作正常。如果庫沒有在註冊表中註冊(這是所有這一切的重點),.Net要求IMarshal。
有沒有什麼辦法可以得到COM內部使用的默認實現IMarshal?或者如果我的對象不實現IMarshal,防止它失敗?
謝謝!
嗯,是什麼讓你相信reg free com「only」在exe級別上工作? – 2010-10-24 07:38:43
因爲COM系統從父進程exe中查找應用程序清單。它不可能知道一個調用來自一個DLL,所以它需要從主機EXE以外的可執行文件中檢索資源。而且我的COM庫可以被另一個DLL(例如Outlook加載項)加載。 – 2010-10-24 15:34:18