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

本文关键字:创建 ActiveX exe VS2010 Net 使用 | 更新日期: 2023-09-27 17:58:05

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

(不用说,我不能使用activeX exe以外的文件)

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

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

Visual Basic 2005升级向导不支持升级Visual基本6 ActiveX EXEs

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

另一种方法是将其转换为常规的.NET COM Interop DLL,这要容易得多,但您可能需要它在进程外运行,而DLL无法做到这一点。

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

(很可能有一些微妙之处,这意味着这些概念并不完全相同,但我认为这是主要想法)。

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

以下是我读到的所有不同的基本技术的摘要。


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

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

  • 步骤1:使用COM可见类型和接口

  • 步骤2:为COM互操作注册.NET程序集

  • 步骤3:在GAC 中安装.NET程序集

  • 步骤4:配置程序集的默认COM代理进程

  • 步骤5:激活您的使用CLSCTX_LOCAL_SERVER 的COM对象

我认为它的步骤4&5,它们确实是这种方法的关键。


[B1]第二种方法是通过…创建"在托管代码中完全实现的COM EXE服务器"

通过以下操作将.NET EXE程序集完全装扮为COM本地服务器满足COM规范。

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

提供类工厂类(实现COMIClassFactory接口)至COM.

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

恰当地呼叫这些工厂上的CoRegisterClassObject()和CoRevokeClassObject(类。


[B2]这里似乎有一个不同的例子声明:

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

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


[C]另一种方法可能是"使用System.EnterpriseServices.ServicedComponent创建COM+组件"(在本链接的SO中对此进行了简要描述)。