C# 在AnyCPU平台调用DLL

注意:本文不适用于ARM处理器,仅用于x86/x64平台

当C#项目编译为AnyCPU时,需要针对于不同平台的本地DLL文件(64位或32位)。

实现的基本思路为

  1. 分别导入x64和x86的函数 ,并添加后缀
  2. 判断当前进程是x64还是x86
  3. 呼叫与对应的函数

示例:

假设被调用的本地DLL的文件名为

testdll64.dll (x64平台) 和testdll32.dll (x86平台)

假设该DLL导出函数

__declspec(dllexport) int __stdcall add(int a, int b);

在C#中调用的方法可以为

[DllImport("testdll32.dll", EntryPoint="add")
private static extern int add86(int a, intb);
[DllImport("testdll64.dll", EntryPoint="add")
private static extern int add64(int a, intb);
public static int add(int a, int b)
{
    if (Environment.Is64BitProcess)
        return add64(a,b);
    return add86(a,b);
}

注意:由于函数名称不同,必须指定EntryPoint