簡體   English   中英

C#:根據平台訪問32位/ 64位DLL

[英]C#: Access 32-bit/64-bit DLL depending on platform

我們使用來自C#應用程序的自編寫32位C ++ DLL。 現在我們已經注意到,當C#應用程序在64位系統上運行時,會自動使用64位運行時,當然無法從64位運行時訪問32位DLL。

我的問題是:有沒有辦法使用32位DLL? 如果沒有,如果我創建了64位版本的DLL,是否可以輕松地讓應用程序選擇哪個到P / Invoke?

我正在考慮在C#中創建兩個輔助類:一個從32位DLL導入函數,一個從64位DLL導入,然后創建一個包裝類,每個導入函數有一個函數調用32位導入器或者64位導入程序取決於操作系統的“bittyness”。 那會有用嗎?

或者還有另一種簡單的方法嗎?

你需要確保在64位編譯時只對64位DLL使用P / Invoke調用。

一種選擇是將所有“方法”移動到標准接口(或抽象基類)中,並提供2個實現,一個32位和一個64位。 您可以使用工廠方法根據IntPtr的大小構造類的相應實例。

這允許“AnyCPU”應用程序在運行時正確地確定要調用哪個DLL,並且確實有效。

創建一個包裝64位和32位DLLS的幫助程序類,並使用IntPtr.Size來確定要調用的內容。

if (IntPtr.Size == 8)
{
    Helper.SomeMethod64();
}
else
{
    Helper.SomeMethod32();
}

您可以將.Net應用程序標記為僅針對x86體系結構

我有類似的問題,但它與Unrar.dll是32或64位。

可以有兩種方法使其工作:

一個)

#if x64
// ... define all x64 imports here
#else
// ... define all x86 imports here
#endif

並編譯32Bit和64bit的應用程序。

b)另一種方法是為導入創建接口並分別實現32位和64位版本。

如果是32位,則實例化32位實現,否則實例化64位實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM