2015-05-08 140 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