C#:根据平台访问32位/ 64位DLL

Tho*_*mar 5 c# 64-bit pinvoke dllimport

我们使用来自C#应用程序的自编写32位C++ DLL.现在我们已经注意到,当C#应用程序在64位系统上运行时,会自动使用64位运行时,当然也无法从64位运行时访问32位DLL.

我的问题是:有没有办法使用32位DLL?如果没有,如果我创建了64位版本的DLL,是否可以轻松地让应用程序选择哪个到P/Invoke?

我正在考虑在C#中创建两个辅助类:一个从32位DLL导入函数,一个从64位DLL导入,然后创建一个包装类,每个导入函数有一个函数调用32位导入器或者64位导入程序取决于操作系统的"bittyness".那会有用吗?

或者还有另一种简单的方法吗?

Ree*_*sey 6

你需要确保在64位编译时只对64位DLL使用P/Invoke调用.

一种选择是将所有"方法"移动到标准接口(或抽象基类)中,并提供2个实现,一个32位和一个64位.您可以使用工厂方法根据IntPtr的大小构造类的相应实例.

这允许"AnyCPU"应用程序在运行时正确地确定要调用哪个DLL,并且确实有效.