注意:本文不适用于ARM处理器,仅用于x86/x64平台
当C#项目编译为AnyCPU时,需要针对于不同平台的本地DLL文件(64位或32位)。
实现的基本思路为
- 分别导入x64和x86的函数 ,并添加后缀
- 判断当前进程是x64还是x86
- 呼叫与对应的函数
示例:
假设被调用的本地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