繁体   English   中英

使用 .Net 4 和 VS2010 创建 ActiveX.exe

[英]Create ActiveX.exe using .Net 4 and VS2010

我的应用程序是 vb6 应用程序,它引用 delphi active.exe 文件。 我需要用 C# 替换这个文件。 如何使用 VS 2010 和 C# 创建 activeX exe?

(不用说我不能使用除 activeX exe 之外的文件)

微软有一个关于将 VB6 ActiveX EXEs 迁移到 .NET的教程。 它特别指出:

Visual Basic 2005 升级向导不支持升级 Visual Basic 6 ActiveX EXE

因此,Microsoft 工具至少不支持基于原始 VB6 代码从 .NET 生成 ActiveX EXE。 (这并不意味着可能不可能有另一条路线。)

An alternative approach could be to convert it to a regular .NET COM Interop DLL which is a lot easier, but you may require it to run out-of-process which a DLL cannot do.

据我所知,VB6 ActiveX EXE 本质上是一个进程外的 COM 服务器。

(很可能有一些微妙之处,这意味着它们不是严格相同的概念,但我认为这是主要思想)。

似乎有几种方法可以从 .NET 创建进程外 COM 服务器。 这个其他问题有几个很好的答案

下面是我读过的所有不同的基本技术的总结。


[A] 一种方法是使用“代理”进程来托管 DLL 请注意,这类似于在 32 位和 64 位之间进行交叉调用的技术。

这篇描述一种方法的微软文章中,关键点是:

  • 第 1 步:使用 COM 可见类型和接口构建 .NET 组件

  • 第 2 步:为 COM 互操作注册您的 .NET 组件

  • 第 3 步:在 GAC 中安装 .NET 组件

  • 第 4 步:为您的装配配置默认的 COM 代理过程

  • 第 5 步:使用 CLSCTX_LOCAL_SERVER 激活您的 COM object

我认为它的第 4 步和第 5 步确实是这种方法的关键。


[B1] 第二种方法是创建一个“在托管代码中完全实现的 COM EXE 服务器 ...

通过满足 COM 规范规定的此类服务器的所有要求,将 .NET EXE 程序集完全装扮成 COM 本地服务器。

它指出这样做符合以下要求并显示了一个示例:

Providing a class factory class (which implements the COM IClassFactory interface) for every .NET class that we want to export to COM.

正确插入 EXE 程序集的注册表项,包括 LocalServer32 项。

在这些工厂类上适当地调用 CoRegisterClassObject() 和 CoRevokeClassObject()。


[B2] 这似乎是一个不同的例子 它指出:

该示例演示了本地服务器 (EXE) 形式的进程外 COM 服务器,该服务器完全在 Visual C# 中实现。

这可能在某些技术细节上有所不同(我还没有真正评估过这可能有多么根本的不同。)


[C] 可能另一种方法是“使用System.EnterpriseServices.ServicedComponent创建 COM+ 组件”(在此链接的 SO 上有简要描述)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM