从64位exe访问32位DLL的方法

buf*_*erz 13 .net c# visual-studio-2010

我有一个必须编译并在64位模式下运行的项目.不幸的是,我需要调用一个仅在32位模式下可用的DLL,因此我无法在一个Visual Studio项目中容纳所有内容.我正在寻找包裹在自己的EXE /服务的32位DLL和远程发布(虽然在同一台机器上)从我的64位应用程序调用该EXE /服务的最佳途径.我的操作系统是Win7 Pro 64位.

对此32位进程的所需调用是每秒几十次,但数据量较低.这是一个实时图像分析应用程序,因此尽管音量低,响应时间仍然很重要.大量发送/接收单个基元.

理想情况下,我会托管一个WCF服务来容纳这个DLL,但在64位操作系统中,不能强制服务作为x86运行!来源.这真是不幸,因为我在我的机器上调用WCF服务的函数只有4毫秒.

我已经尝试过命名管道.net.我发现它们比WCF慢40-50倍(对我来说无法使用).

任何其他选择或建议,以最好的方式来解决我的难题?

dri*_*iis 9

正如您所记得的那样,在同一个过程中无法混合位数.您需要为32位部分单独处理.

我认为托管WCF服务是正确的方法.您的链接仅涉及wcfsvchost.我很确定你可以创建自己的Windows服务,并在32位上托管WCF服务.

请参阅此链接:如何在托管应用程序中托管WCF服务.您可以在任何托管应用程序(包括Windows服务)中托管您的服务,并在您喜欢的位置下运行它.

这是在应用程序中自托管WCF服务所需的代码量,假设您刚刚创建了一个名为MyService的新服务,并且已将相应的配置添加到app.config:

class Program
{
    static void Main(string[] args)
    {
        using(ServiceHost host = new ServiceHost(typeof(MyService), new Uri[0]))
        {
            host.Open();
            Console.ReadKey();    
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您将它显式编译为32或64位,上面的程序也会运行.