我在一年前在Windows 7 32位下使用C#创建了一个库,它可以正常工作,这个库使用“User32.dll”和“Gdi32.dll”库。
起初我为AnyCPU编译了这个库,它在32位上工作,但它在win 64bit上不起作用,我也为64位CPU编译它,但同样的情况再次发生。
我的库使用“User32.dll”中的“RawInput devices”和“gdi32.dll”中的“GetDeviceCaps”。
答案 0 :(得分:1)
第三方DLL本质上是32位,无法从64位客户端访问。我还没有看到任何实际工作的变通方法。显然,如果用“任何CPU”编译并从32位或64位主机客户端调用,.NET DLL将自动调整。
以及MSDN中的this question:
64位可执行文件无法调用32位dll而反之亦然。除非您确实需要将应用程序设置为64位,否则最简单的选择是将其设置为目标x86。这仍然允许它在32位和64位版本的Windows上运行。
如果由于某种原因这是不适用的,可能的解决方案是创建一个单独的32位进程,加载32位dll,让你的64位应用程序与另一个进程通信,可能使用IPC(在一些简单的情况下,重定向)标准输入和输出也可以工作,甚至只是检查过程的返回值)。无论如何,这会导致一些额外的工作;我建议您先准确查看您的要求。