C#中64位应用程序中的32位DLL

6

你好
我想在c#中创建一个64位应用程序,并且想要在其中使用由C++ builder(32位)创建的dll。但是当我尝试加载该dll时,应用程序会崩溃。在32位下构建时它可以工作。有没有办法在64位应用程序中使用这个dll?

3个回答

8

不可能做到这一点。在Windows中,进程要么是32位的,要么是64位的,它只能加载与之匹配的DLL。任何尝试加载不匹配的DLL都将失败并产生错误。

如果您需要匹配32位和64位代码,则需要使用多个进程。但在这种情况下,我建议将应用程序设置为32位或将DLL设置为64位。


1

你想构建一个64位应用程序,还是想构建一个能在64位环境下运行的应用程序?即使目标平台是x86,你的应用程序在64位环境中也可以完美运行。


我需要一个64位的应用程序,使用GetModuleBaseName WINAPI函数来获取64位应用程序的exe名称。当它在64位操作系统上运行的32位应用程序中使用时,它只能检索32位进程的名称。 - rodro

0

在Windows上,您无法将32位DLL加载到64位进程中。

我自己从未尝试过,但您可能能够创建一个单独的32位应用程序,可以在不同的进程中运行并充当DLL的代理。然后,您的应用程序可以以64位运行,并通过WCF上的远程过程调用与DLL通信。

如果性能是一个问题,那么您最好的选择是尽可能在64位中重新构建DLL。


WCF - 我认为它对我来说太难了(至少现在是这样)。我宁愿使用文件映射来在这两个应用程序之间共享数据。但是,我正在考虑将dll重写为64位,但由于c++ builder仅支持32位,因此我需要使用我不熟悉的VS。 - rodro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接