c# - 从 64 位 exe 访问 32 位 DLL 的方法

标签 c# .net visual-studio-2010

我有一个项目必须在 64 位模式下编译和运行。不幸的是,我需要调用仅在 32 位模式下可用的 DLL,因此我无法将所有内容都放在一个 1 Visual Studio 项目中。我正在努力寻找将 32 位 DLL 包装在其自己的 exe/服务中并从我的 64 位应用程序发出对该 exe/服务的远程(尽管在同一台机器上)调用的最佳方法。我的操作系统是 Win7 Pro 64 位。

此 32 位进程所需的调用是每秒几十次,但数据量很小。这是一个实时图像分析应用程序,因此尽管数量很少,但响应时间至关重要。大量发送/接收单个原语。

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

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

关于解决我的难题的最佳方法的任何其他选项或建议?

最佳答案

正如您正确指出的那样,无法在同一进程中混合位数。您的 32 位部分需要一个单独的进程。

我认为托管 WCF 服务是正确的方法。您的链接只谈论 wcfsvchost。我很确定您可以创建自己的 Windows 服务,并在 32 位上托管 WCF 服务。

请参阅此链接:How to host a WCF service in a managed application .您可以在任何托管应用程序(包括 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();    
        }
    }
}

上面的程序同样可以运行,即使您将它显式编译为 32 位或 64 位。

关于c# - 从 64 位 exe 访问 32 位 DLL 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2804818/

相关文章:

c# - 使用 MvcMailer 发送电子邮件表单

c# - 在屏幕顶部显示 wpf 窗口

c# - 从 c# .net 应用程序中的 ihttpmodule 检测映射的虚拟目录

c# - SMTP 服务器需要安全连接或客户端未通过身份验证 - 仍无法正常工作

visual-studio-2010 - Visual Studio 2010 中的项目构建顺序?

c - 如何在 Visual Studio 2010 for C 中使用 igraph(和其他库)?

c# - 我为 Windows Phone 7 创建的每个应用程序都出现错误

C# MVC 4 多线程和 Web 请求

c# - (C#) 在 (EC)DHE x25519 上使用私钥和公钥计算 key 份额

c# - 如何在 c#.net 中制作来电显示