Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.Net 4和VS2010创建ActiveX.exe_C#_Visual Studio 2010 - Fatal编程技术网

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

C# 使用.Net 4和VS2010创建ActiveX.exe,c#,visual-studio-2010,C#,Visual Studio 2010,我的应用程序是vb6应用程序,它引用delphi active.exe文件。 我需要用C#one替换这个文件。 如何使用VS 2010和C#创建activeX exe (不用说,我不能使用activeX exe以外的文件)有一个问题。它具体规定: Visual Basic 2005升级向导不支持升级Visual Basic 基本6 ActiveX EXE 因此,至少Microsoft工具不支持基于原始VB6代码从.NET生成ActiveX EXE。(这并不意味着不可能有另一条路线。) 另一种方法

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

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

有一个问题。它具体规定:

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

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


另一种方法是将其转换为常规的.NET COM互操作DLL,这要容易得多,但您可能需要它运行完DLL无法完成的进程。

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

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

从.NET创建进程外COM服务器似乎有几种方法

下面是我读到的所有不同的基本技巧的摘要


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

通过描述一种方法,关键点如下:

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

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

  • 台阶 3:在GAC中安装.NET程序集

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

  • 第五步:激活你的 使用CLSCTX_本地_服务器的COM对象

我认为第4步和第5步是这个方法的关键


[B1]第二种方法是通过以下方式创建一个“

通过将.NET EXE程序集完全伪装为COM本地服务器 满足合同规定的此类服务器的所有要求 COM规范

说明这样做符合以下要求,并举例说明:

提供类工厂类(实现COM IClassFactory接口),用于我们要导出的每个.NET类 通信

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

恰当地呼唤 这些工厂上的CoreRegisterClassObject()和CoRevokeClassObject() 上课


[B2]看起来像什么。它指出:

该示例演示了一个进程外COM服务器,其形式为 本地服务器(EXE),完全用Visual C#实现

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



[C]另一种方法可能是“使用
System.EnterpriseServices.ServicedComponent
创建COM+组件”(即)。

不幸的是,本文没有回答我的问题。我需要开发一个文件,将取代现有的一个不接触应用程序或创建包装。你熟悉这样做的方法吗?这能回答你的问题吗?