2015-05-08 222 views
3

我正在创建一个类库,我希望最终把它放在NuGet上。目前,它的目标是AnyCPU。C#和PInvoke到32/64位DLL

我现在想要PInvoke到一个DLL,它有32位和64位版本。最初,我认为我只使用32位版本,但是这引发了BadImageFormatException。我只改变了库的目标为X86,而这个工作,它需要调用者是一个32位的过程。这自然不适用于NuGet项目。

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

+1

看看SQLite是如何做到这一点的。 –

回答

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