0

这个问题是 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);
4

1 回答 1

0

看看这个答案。必须首先将程序集添加到 GAC,然后必须使用 regsvcs 实用程序创建 COM+ 应用程序。否则,.Net 根本不会查看 COM+ 目录:

"c:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe" MyObject.dll
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /i MyObject.dll
于 2015-10-23T18:54:09.733 回答