我有幾個Com-visible接口和類的C#程序集。這個程序集依賴於沒有強名稱的兩個程序集,不能用任何其他方式進行簽名或修改。因此,註冊組裝和使用本機C創建TLB文件++庫我使用這些生成後命令執行CoCreateInstance時COM錯誤0x8007002(找不到文件)
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" MyLib.dll /regfile /asmpath:"..\depencies\;C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5"
regedit /s MyLib.reg
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\tlbexp" MyLib.dll /asmpath:"../depencies" /out:MyLib.tlb
在我的.h文件本機庫包括我這樣的TLB文件:
#import "../Build/MyLib.tlb" no_namespace named_guids
extern ILinkVariableManager *LinkVariables();
在CPP文件我實現了其中的CoCreateInstance調用的方法:
ILinkVariableManager *linkVariables = NULL;
ILinkVariableManager *LinkVariables(){
if(linkVariables!=NULL)
return linkVariables ;
HRESULT result2 = CoCreateInstance(CLSID_LinkVariableManager2,
NULL, CLSCTX_INPROC_SERVER,
IID_ILinkVariableManager, reinterpret_cast<void**>(&linkVariables));
return linkVariables;
}
所有工作得很好,直到我說了一些方法,類和接口,改變了GUID的所有接口和c#程序集。現在,CoCreateInstance返回0x80070002錯誤,並將linkVariable值設置爲0.我在這裏看到兩個可能的原因:我的程序集註冊方式不正確,第一次在GUID改變(但在.tlh文件GUID是實際的)後意外地出現了問題或者出現了問題。
我剛剛創建了新項目,那裏有一個簡單的類,並試圖在新的C++本地項目中使用它,但CoCreateInstance返回相同的錯誤。 – FLCL
regasm是否可用於註銷沒有強名稱的程序集,該程序不在緩存中? – FLCL
是的,您不需要將該DLL放入GAC。如果程序集不是強名稱,它將嘗試在exe路徑中找到它 – Matt