調試時發現 HMODULE hpsDLL = LoadLibrary("pstorec.dll"); 返回值監視視窗顯示 unused = CXX0030: 錯誤: 無法計算表達式的值,**這不代表載入失敗**。
hpsDLL 本身是非零值(如 0x7F...`),表示載入成功,句柄有效。unused 是調試器顯示的內部字段(內核對象引用計數等),**無業務參考意義**,調試器無法解析其值屬正常現象。HMODULE hpsDLL = LoadLibrary("pstorec.dll");
if (hpsDLL == NULL) {
DWORD err = GetLastError(); // 獲取真實錯誤碼
// 常見錯誤:126 (模塊未找到)、193 (非有效 Win32 應用/位數不匹配)
printf("LoadLibrary failed: %lu\n", err);
return;
}
// 成功:獲取導出函數地址
auto pFunc = (MyFuncType)GetProcAddress(hpsDLL, "MyFunction");
if (pFunc) pFunc();
| 錯誤碼 | 含義 | 排查方向 |
|---|---|---|
| 126 (ERROR_MOD_NOT_FOUND) | DLL 或其依賴項未找到 | 1. DLL 路徑不在搜索順序中 2. 依賴 DLL 缺失 (用 Dependency Walker 分析) 3. 32/64 位不匹配 |
| 193 (ERROR_BAD_EXE_FORMAT) | 非有效 Win32 應用 | 進程與 DLL 位數不一致 (x86 進程載入 x64 DLL 或反之) |
| 1114 (ERROR_DLL_INIT_FAILED) | DLL 初始化失敗 | DllMain 返回 FALSE,檢查依賴初始化順序、靜態對象構造異常 |
Dependency Walker (depends.exe) 或 dumpbin /dependents pstorec.dll 確認依賴鏈完整。SetDllDirectory/AddDllDirectory 添加搜索路徑。FreeLibrary(hpsDLL),避免句柄洩漏。**核心原則**:只關注 hpsDLL == NULL 與 GetLastError(),忽略調試器顯示的內部字段異常。