gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:50:17 27 4
gpt4 key购买 nike

我需要修改 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?

提前致谢。

最佳答案

这不太可能是 DLL hell 问题。您可以使用调试器的 Debug + Windows + Modules 窗口仔细检查,它会显示 DLL 的路径。通过让 MSBuild 注册组件、Project + Properties、Build 选项卡、“Register for COM interop”选项来保持注册表清洁。 VS 必须提升运行。

这是一个 MethodAccessException ,总是一个编码错误。需要在没有看到您的代码的情况下进行心理调试,但最简单的解释是您的 C# 类的默认构造函数不是公共(public)的。

关于c++ - COM 代码库位置 - 如何选择要使用的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27639285/

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