通过P/Invoke导入x86环境下项目中的x86_64 DLL



我当前的目标框架是.NET framework v4.0。

我在导入DLL时遇到问题,因为我得到了";BadImageFormatException";类似于这个后BadImageFormatException加载32位DLL时,目标是x86

从那里我意识到DLL(从NuGet检索(只能在x64中构建,但我的解决方案只能是x86,因为这是团队决定的。所以我不能将配置更改为x64。

我当前正在使用p/Invoke导入它(DllImport(。我的机器是x64。对于上下文,这个DLL是用托管的本机c++代码构建的,我正在尝试将其转换为c#。我不能触摸dll,因为它不是我的库,但我的项目在c#中。

由于不允许我更改项目设置,并且DLL只能在x64中构建和运行,因此有其他方法可以解决此问题吗?

您不能在32位进程中加载64位dll。您的选择是:

  1. 将应用程序更新到x64模式。这通常需要将所有本机组件更改为x64版本。您说过您的团队决定使用x86,但如果您有充分的理由,可以重新评估这些决定
  2. 想办法获得x86版本的库。这可能涉及创建您自己的构建,因此可能会非常昂贵
  3. 在单独的进程中运行库,并使用您喜欢的RPC/IPC方法在进程之间进行通信。这通常会使部署和调试应用程序变得更加困难,具体取决于库的使用频率

最新更新