c# - 来自 native 应用程序的 CoCreateInstance C# COM 组件找不到引用

标签 c# c++ .net com com+

我有一个关于从 native C++ 应用程序创建 COM C# 组件的问题。

C# 组件正在引用一个包含 COM 接口(interface)的程序集。 所以项目 A(.dll) 包含 COM 接口(interface),项目 B(.dll) 包含实现此接口(interface)的 COM 类。

然后使用我系统上某个文件夹中的 regasm 注册此 C# COM 组件,例如: C:\TestComponent 包含A.dll & B.dll,B是使用regasm注册的。

当安装在另一个路径中的 native C++ 应用程序(COM 服务器)尝试从项目 B 创建 C# COM 类的实例时,失败并提示找不到 A.dll。

如果我(仅)将 A.dll 复制到我的 native C++ 应用程序的安装目录,一切都会完美运行。

关于如何告诉我的原生 C++ 应用它需要在指定目录或 B.dll 所在的目录中找到 A.dll 的任何想法?

亲切的问候, 德怀特

最佳答案

无论是非托管服务器还是用 C# 编写的服务器,在 COM 服务器中具有依赖性始终是一个问题。就像 Windows 一样,CLR 只会在几个选定的位置查找 DLL。分别是GAC和EXE所在的目录。还可以选择使用 app.exe.config 文件查看 EXE 目录的子目录。

在这里敲掉候选人:你会想要避免给客户端 EXE 一个 .config 文件,你不控制它的位置或配置,它是别人的程序。 EXE 目录也有同样的问题。

这离开了 GAC。

也是Regasm.exe喜欢的位置,在你放置程序集后注册时省略/codebase选项in the GAC . GAC 可以存储不同版本的 DLL,这是解决与 COM 密切相关的 DLL hell 问题的一种非常好的方法。

关于c# - 来自 native 应用程序的 CoCreateInstance C# COM 组件找不到引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18714519/

相关文章:

c# - DNN 7 Web API 模块;无法加载文件或程序集

c++ - 调试 PIN 工具 add-symbol-file 不起作用

C++ -malign-double 编译器标志

c++ - 链表运算符重载问题

c# - NHibernate 存储过程返回先前查询的数据

c# - 四指阵法统一

c# - 线程锁和静态构造函数

c# - 在 GenericADOException 之后尝试 Session.GetAll 时, "MyEntityType"条目中的空 ID(发生异常后不刷新 session )

.net - 将 LINQ to XML 结果转换为 VB.NET 中的通用列表。奇数错误

c# - 在从查询返回字符串值之前检查异常