如何解决使用.Net 4和VS2010创建ActiveX.exe
| 我的应用程序是vb6应用程序,它引用了delphi active.exe文件。 我需要将此文件替换为C#one。 如何使用VS 2010和C#创建activeX exe? (不必说我不能使用ActiveX exe以外的文件)解决方法
Microsoft提供了有关将VB6 ActiveX EXE迁移到.NET的教程。它特别指出:
Visual Basic 2005升级向导不支持升级Visual
基本的6个ActiveX EXE
因此,至少Microsoft工具不支持基于原始VB6代码从.NET生成ActiveX EXE。 (这并不意味着可能没有其他路线。)
一种替代方法是将其转换为更简单的常规.NET COM Interop DLL,但您可能需要它运行DLL无法执行的进程外。
, 据我所知,VB6 ActiveX EXE本质上是进程外COM服务器。
(可能存在一些微妙之处,这意味着它们并不是严格相同的概念,但我认为这是主要思想)。
当然,似乎有几种方法可以从.NET创建进程外COM服务器。这个问题有几个很好的答案。
以下是我已阅读的所有不同基本技术的摘要。
[A]一种方法是使用“代理”过程托管DLL。注意,这类似于在32位和64位之间进行交叉调用的技术。
从这篇描述一种方法的Microsoft文章中,关键点是:
步骤1:使用COM可见类型和
介面
步骤2:注册您的.NET程序集以进行COM互操作
步
3:在GAC中安装.NET程序集
步骤4:设定
程序集的默认COM代理过程
第5步:激活您的
使用CLSCTX_LOCAL_SERVER的COM对象
我认为步骤4和步骤5确实是此方法的关键。
[B1]第二种方法是通过...创建一个“完全在托管代码中实现的COM EXE服务器”。
完全将.NET EXE程序集装扮成COM本地服务器,方法是:
满足服务器所规定的所有要求
COM规格。
它指出,这样做满足以下要求,并显示了一个示例:
提供一个类工厂类(实现COM
我们要导出的每个.NET类的IClassFactory接口)
到COM。
正确插入EXE程序集的注册表项,
包括LocalServer32键。
适当地打电话
这些工厂上的CoRegisterClassObject()和CoRevokeClassObject()
类。
[B2]这似乎是一个不同的示例。它指出:
该示例以以下形式演示了进程外COM服务器:
本地服务器(EXE),它完全在Visual C#中实现。
这可能在某些技术细节上有所不同(我尚未真正评估过这可能有多大的不同。)
[C]可能的另一种方法是“使用
System.EnterpriseServices.ServicedComponent
创建COM +组件”(此链接在SO上进行了简要描述)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。