簡體   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