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

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

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

 

解决方法:

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

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

 

posted @ 2020-11-27 01:07  PencilStart  阅读(2796)  评论(0编辑  收藏  举报