[英]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.