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

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

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

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

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

在64位编译时,您需要确保只对64位DLL使用P / Invoke调用。

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

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

创建一个包装64位和32位DLLS的帮助程序类,并使用IntPtr.Size来确定要调用的内容。

if (IntPtr.Size == 8) { Helper.SomeMethod64(); } else { Helper.SomeMethod32(); } 

您可以将.Net应用程序标记为仅针对x86体系结构

我有类似的问题,但是Unrar.dll是32或64位。

可以有两种方法使其工作:

一个)

 #if x64 // ... define all x64 imports here #else // ... define all x86 imports here #endif 

并编译32Bit和64bit的应用程序。

b)另一种方法是为导入创建接口,并分别实现32位和64位版本。

如果是32位,则实例化32位实现,否则实例化64位实现。