COM代码库位置 - 如何选择要使用的版本?

时间:2014-12-24 15:47:41

标签: c++ dll com com-interop regasm

我需要修改C#DLL中的代码并在C ++应用程序中使用它。我在C ++中根本不精明,所以如果有什么不清楚,请告诉我。

我使用以下方式注册了C#程序集:

regasm file.dll /tlb:file.dll /codebase

但是,当我尝试在c ++应用程序中使用它时:

CLSID clsid;
CLSIDFromProgID(L"MyApp.MyClass", &clsid);

HRESULT hr = CoCreateInstance(clsid,NULL, CLSCTX_INPROC_SERVER ,IID_MyClass, reinterpret_cast<void**>(&myclass));

hr返回0x8013151a: access to this member is denied

我注意到在注册表中,我看到C#dll的多个版本(Codebase指向不同的dll位置)。

我认为问题是因为它没有使用正确的dll。 (我可能完全错了)。

我的问题是,你怎么知道它试图加载哪个版本的dll?

提前致谢。

1 个答案:

答案 0 :(得分:4)

这不是一个DLL地狱问题。您可以使用调试器的Debug + Windows + Modules窗口仔细检查,它会显示DLL的路径。让MSBuild注册组件,Project + Properties,Build选项卡,&#34;注册COM互操作&#34;保持注册表清洁。选项。 VS必须升高。

这是一个MethodAccessException,总是一个编码错误。无需查看代码即可进行心理调试,但最简单的解释是您的C#类&#39;默认构造函数不公开。