C# 64位 程序 如何 动态载入(读取) C++ 开发的 32位 DLL?

所谓动态载入,就是运行时,使用到 kernel32.dll 中的 LoadLibrary() 去载入 32 位的 DLL。

问题来了,在64位 WIN 环境下,WindowsSystem32Kernel32.dll 是 64位 !!!!真正的 32位 kernel32.dll 在 WindowsSysWOW64 下,按原来 Windows 的思路,WindowsSystem 放的是16位 DLL,System32放的是32位DLL,那么64位系统DLL,就应该放到 System64下啊!!!你说这些阿三干的是啥?所以,就会发生 64位 C# 程序使用 WindowsSystem32kernel32.dll 中的 LoadLibrary() 时,载入不了 32位 DLL 的情况。

解决方法:

首先,最简单的方法,就是牺牲 C# 64位的特点,把工程输出 从 AnyCPU 改为 x86。这样就是一路32位了(其实就变成 32位 C#程序 动态调用 32位 C++ DLL了)。

其次,有人提出一个方法就是 做一个 ATL COM 的封装服务EXE,用那个去 载入 32位的DLL,待尝试。

原文地址:https://www.cnblogs.com/pencilstart/p/14045657.html