錯誤碼含義
`122` = `ERROR_INSUFFICIENT_BUFFER`:**提供的緩衝區太小**,無法容納所需數據 (如路徑字符串、結構體)。
常見原因
- 路徑字符串緩衝區不足:`LoadLibrary` 參數若為非空結尾字符串、或長度超過 `MAX_PATH` (260) 且未啟用長路徑支持。
- 調用約定/參數類型錯誤:C# P/Invoke 簽名錯誤 (如 `string` vs `StringBuilder`、缺 `CharSet`)。
- DLL 依賴缺失:目標 DLL 依賴其他 DLL 未在搜索路徑,系統嘗試加載依賴時緩衝區不足。
- 載入標志衝突:`LOAD_WITH_ALTERED_SEARCH_PATH` 需絕對路徑,若傳相對路徑可能觸發內部緩衝區邏輯錯誤。
排查步驟
- 確認 DLL 路徑絕對、存在、架構匹配 (x86/x64)。
- 用 `Dependency Walker` (depends.exe) 檢查 DLL 依賴鏈是否完整。
- 簡化測試:`LoadLibrary(L"C:\\Full\\Path\\test.dll")` 僅用基本參數。
- 檢查 P/Invoke 簽名 (C#):
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);
- 啟用長路徑 (Win10 1607+):註冊表 `HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled = 1` 或 Manifest 宣告。
最佳建議
**首先獲取 DLL 供應商提供的示例代碼並確保其能運行**,再據此改寫。缺乏文檔的第三方 DLL 極難正確調用。