新聞速報

        

2017年9月14日 星期四

C# 在 64-bit 平台載入 32-bit DLL 出錯 (0x8007000B)

 在 C# 程式碼中,載入 32-bit DLL時,出現錯誤:

 System.BadImageFormatException 未處理
  Message=無法載入檔案或組件 'your project' 或其相依性的其中之一。 

試圖載入格式錯誤的程式。

解法一:
 使用 64-bit 的 DLL,如果有的話.....

解法二:
 C#專案 → 滑鼠右鍵 → 屬性 → (標籤)建置 → 平台目標 → Any CPU 改成 x86
 → 上面的標籤 → 滑鼠右鍵 → 儲存選取項目


.NET 程式被編譯成 Any CPU,其中引用32位元Unmanaged DLL。
在 x86 環境程式以 32 位元模式執行執行無誤。
當程式跑在 x64 OS,Any CPU 程式會以 64 位元模式執行,一旦載入 32 位元 Unmanaged DLL,轟!

 

2 則留言:

  1. 我使用 VS 2019,
    > C++ DLL: platform (Win32) + Target Machine(MachineX86 (/MACHINE:X86))
    > C# application: Platform: Active (Any CPU) + Platform Target (x86)

    為什麼我還是得到: HRESULT: 0x8007000B 的錯誤?

    回覆刪除
  2. 順便請問 C++ configuration,platform 跟 Target Machine 有何差別?
    C# configuration,platform 跟 Platform Target 有何差別?

    回覆刪除