gpt4 book ai didi

c# - 执行 CoCreateInstance 时出现 COM 错误 0x8007002(找不到文件)

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:11 25 4
gpt4 key购买 nike

我有几个 Com 可见接口(interface)和类的 C# 程序集。此程序集依赖于两个没有强名称的程序集,无法以任何其他方式对其进行签名或修改。因此,要注册程序集并创建用于在 native C++ 库中使用的 tlb 文件,我使用这些构建后命令

"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 文件中的 native 库中,我包含这样的 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;
}

在我向类和接口(interface)添加一些方法并更改所有接口(interface)和 c# 程序集的 guid 之前,一切都运行良好。现在 CoCreateInstance 返回 0x80070002 错误并将 linkVariable 值设置为 0。我在这里看到两个可能的原因:我的程序集注册方式不正确,第一次所有工作意外或在 guid 更改后出现问题(但在 .tlh 文件中 guid 是实际的)。

最佳答案

问题已通过将/codebase 参数添加到 regasm.exe 构建后命令调用来解决。0x80070002 错误表示缺少 MyLib.dll 的文件路径。

关于c# - 执行 CoCreateInstance 时出现 COM 错误 0x8007002(找不到文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com