这个问题是 Marc Gravell 对我的问题Create Out-Of-Process COM in C#/.Net的回答的后续问题?. 我选择了他提出的解决方案,但现在正在处理不同的问题。
这是我的情况:
- 我在 C# 中实现了一个“DataProvider”COM 组件
- 该组件托管在 COM+ Server 应用程序中,因此多个进程可以访问 DataProvider 的同一个实例
- 可以通过 COM 访问数据提供者的进程类型有 Matlab、VB 脚本和 .Net 应用程序。
当从 Matlab 或 VB 脚本实例化 COM DataProvider 时,COM+ 机制启动,我可以验证是否可以使用 DataProvider 的单个实例。
当我尝试从 .Net 访问 COM+ 托管实例时,问题就出现了。基本上,当 COM 组件基于 .Net DLL 时,即使延迟加载,.Net 似乎总是会找到 DLL 并从那里实例化对象,从而跳过整个 COM 机制。这是预期的表演,但对我来说没有帮助。
现在的问题是:是否可以使用 COM 机制在 .Net 应用程序中实例化 .Net 编写的 COM 组件?
请注意,以下代码不使用 COM 机制:
Type type = Type.GetTypeFromProgID(progID);
return Activator.CreateInstance(type);