gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:08:57 26 4
gpt4 key购买 nike

我有一个项目必须在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com