首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 無法載入 DLL「###.dll」:找不到指定模組 (HRESULT: 0x8007007E) 解決方案彙總

     編輯:關於C#

錯誤情況

呼叫非受控 DLL 時拋出:無法載入 DLL "###.dll",找不到指定的模組 (Exception from HRESULT: 0x8007007E)。

基本原則:DllImport 呼叫非受控 DLL

using System.Runtime.InteropServices;
[DllImport("Kernel32")]
public static extern int GetProcAddress(int handle, string funcname);

C++ 函數需符合:

  1. 全域函數(非類別成員)。
  2. 參數為基本型別(C++ 與 C# 皆有對應型別),否則無法在 extern 宣告中對應。

常見問題與解決

1. C++ 參數為 CString,C# 如何對應?

C++ 改用 char** 或 LPCTSTR,C# 用 ref string 或 StringBuilder。
例:C++ int Set(char** str, int n) → C# int Set(ref string str, int n)。

2. VC++ 產生的 DLL 函數在類別中(導出類別),C# 能直接呼叫嗎?

不能直接呼叫類別成員。建議在 C++ 另寫全域封裝函數:

int DllGetCh(int a) {
  Solution st = new Solution(); // 實例化類別
  return st.getch(a);
}

再對 DllGetCh 做 DllImport。

3. BOOL 型別對應

VC++ BOOL → C# System.Int32(或 bool 需注意大小),建議統一用 int。

DLL 檔案放置位置

  1. 專案輸出目錄:bin/Debug/ 或 bin/Release/
  2. 系統目錄:C:/Windows/System32

關鍵排查:依賴鏈缺失

若路徑正確仍失敗,90% 以上是該 DLL 依賴其他 DLL 但未放置在可尋找路徑。需檢查依賴項(用 Dependency Walker 等工具)並確保所有相依 DLL 皆在搜尋路徑中。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved