使用.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以外的文件)
微软有一个关于将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中对此进行了简要描述)。