C#和PInvoke转换为32/64位DLL

时间:2015-05-08 03:59:26

标签: c# nuget pinvoke

我正在创建一个类库,我希望最终将它放在NuGet上。目前,它的目标是AnyCPU。

我现在想把PInvoke变成一个DLL,它有32位和64位版本。最初,我以为我只使用32位版本,但这引发了BadImageFormatException。我将库更改为仅针对X86,虽然这有效,但它也要求调用者也是32位进程。这自然不适用于NuGet项目。

欣赏有关如何使用本机库的32/64位版本的任何想法,以及如何在NuGet中打包它(不希望有2个不同的程序集)。

1 个答案:

答案 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了解替代方法。