32位dll导入64位.Net应用程序

我遇到了问题,我从昨天开始尝试解决它,但没有运气。 我有32位delphi dll,我想在.NET Win应用程序中导入。 此应用程序必须基于任何CPU模式构建。 当然,还有BadImageFormatException即将到来,这意味着在x64应用程序中无法加载x86 dll ..我用Google搜索并找到解决方案,它说我必须做包装,但对我来说还不清楚。 任何人都可以告诉如何解决这个问题,有没有可能的方法我可以在程序建立任何CPU或x64模式(可能是另一种解决方案)中导入32位Delphi dll。

一般的想法可能是使用托管的32位包装器dll包装您的(非托管)32位DLL并使其可见COM。 这允许通过其COM接口调用包装器DLL。

您可以使用COM代理来使您的COM DLL显示为进程外COM服务器。 请查看此SO问题以获取有关此主题的更多信息: 从x64 .NET访问x86 COM 。

您需要做的是在32位进程中编写一个承载32位DLL文件的包装器应用程序。

然后,您的64位应用程序必须通过网络方式与此32位进程通信,或者通过COM对象或类似方式使DLL函数可用。

无论您如何努力,都无法在64位进程内运行32位DLL,因此需要在32位进程中运行它。

如果不能选择仅为32位编译应用程序,则除了创建宿主应用程序之外别无选择。

据我所知,您无法使用64位应用程序中的32位DLL。 也就是说,您可以仅为X86编译应用程序。

您找到的解决方案可能是关于如何在“任何CPU”编译的项目中使用32位和64位版本的DLL,具体取决于应用程序是在32位还是64位环境中运行。

为此,您可以在C#中编写两个包装DLL,一个用于64位,一个用于32位,并根据您是在64位还是32位操作系统上运行使用相应的包装器。

但是,当你拥有的只是一个32位DLL时,这不起作用。 64位应用程序不能使用32位DLL,以及32位应用程序不能使用64位DLL。

因此,您需要编译32位应用程序,或者必须创建64位版本的DLL。

一个解决方案,虽然有点混乱可能是编写一个单独的32位应用程序,您可以从您的64位应用程序,如控制台应用程序,您发送命令或从中发送命令。

不漂亮,但如果你只需要偶尔打电话,它可能会工作。

只需将.Net应用程序编译为Platform x86即可。 它将在x64机器上运行,它将使用您的32位DLL。 不要在包装纸上浪费时间。