COM 代码库位置 - 如何选择要使用的版本
COM Codebase Location - How to pick which version to use?
我需要修改 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地狱问题。 可以使用调试器的"调试 + 窗口 + 模块"窗口进行仔细检查,它显示 DLL 的路径。 通过让 MSBuild 注册组件、"项目 + 属性"、"生成"选项卡、"注册 COM 互操作"选项,保持注册表干净。 VS 必须提升运行。
这是一个 MethodAccessException,始终是一个编码错误。 在看不到代码的情况下需要进行心理调试,但最简单的解释是 C# 类的默认构造函数不是公共的。
相关文章:
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 重载模板函数未为特定类型选择正确的版本
- 选择特定版本的 Visual Studio 命令行工具包,并根据特定版本的C++运行时环境编译文件
- 使用宏进行动态版本选择
- 为什么两阶段查找无法选择"交换"的重载版本?
- C++ 函数解析选择模板化版本而不是普通函数
- 如何选择基于C++版本的函数实现
- COM 代码库位置 - 如何选择要使用的版本
- Scons 选择哪个版本的 g++ |无法识别的命令行选项"-std=c++11"
- 如何让编译器在指针上选择模板的静态数组版本
- "string_literal"解析为布尔值,但不解析为 std::string,当编译器选择函数的重载版本时
- 在生成文件中自动选择与 C++11 兼容的 g++ 版本
- 除了制作类的const版本,还有其他选择吗
- 使用模板选择函数的正确版本
- 我有什么选择来构建一个在XP及更高版本上运行但具有最新功能的WTL程序
- 如何使用cmake脚本从命令行选择用于编译C++代码的xcode版本
- 如何设置/选择应包含的助推版本
- 在c++中嵌入python:选择python版本
- 为什么在这段代码中,编译器选择了r值的ref版本
- Boost序列化:如何在运行时选择版本