C#和PInvoke到32/64位DLL

3
我正在创建一个类库,希望最终将其放在NuGet上。目前,它的目标是AnyCPU。
我现在想要PInvoke到一个DLL中,该DLL有32位和64位版本。最初,我认为我只会使用32位版本,但是这会引发一个BadImageFormatException异常。我改变了库以仅针对X86,虽然这样做是有效的,但它要求调用者也是一个32位进程。对于一个NuGet项目,这自然不可行。
欢迎任何关于如何处理32/64位本地库的想法,以及如何在NuGet中打包此内容(希望不必有两个不同的程序集)。

1
看一下SQLite是如何实现的。 - Cory Nelson
1个回答

3
您可以在运行时检查平台并调用不同的DLL。
static void NativeFuncWrapper(){
    if(Environment.Is64BitProcess){
        NativeFuncWrapper64(); //this calls 64-bit dll
    }else{
        NativeFuncWrapper32(); //this calls 32-bit dll
    }
}

如果你想在不使用Environment.Is64BitProcess的情况下使其工作,请阅读如何以编程方式确定进程是32位还是64位的来了解替代方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接