在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
所谓动态载入,就是运行时,使用到 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,待尝试。
|
请发表评论