我正在创建一个类库,我希望最终将它放在NuGet上。目前,它的目标是AnyCPU。
我现在想把PInvoke变成一个DLL,它有32位和64位版本。最初,我以为我只使用32位版本,但这引发了BadImageFormatException。我将库更改为仅针对X86,虽然这有效,但它也要求调用者也是32位进程。这自然不适用于NuGet项目。
欣赏有关如何使用本机库的32/64位版本的任何想法,以及如何在NuGet中打包它(不希望有2个不同的程序集)。
答案 0 :(得分:3)
您可以在运行时检查平台,将PInvoke检查到不同的DLL中。
static void NativeFuncWrapper(){
if(Environment.Is64BitProcess){
NativeFuncWrapper64(); //this calls 64-bit dll
}else{
NativeFuncWrapper32(); //this calls 32-bit dll
}
}
如果您希望它在没有Environment.Is64BitProcess
的情况下工作,请阅读How to know a process is 32-bit or 64-bit programmatically了解替代方法。