XP 系統上同一 Oracle Client 配置,應用 AX2 連接成功,AX1 卻報 ORA-12545: 因目標主機或對象不存在, 連接失敗。經排查,並非網絡或配置問題,而是 AX1 目錄下攜帶了一個殘缺的 ws2_32.dll(Windows Socket 庫),導致 OCI 動態庫加載錯誤版本。
TestOCI.exe,放在不同目錄運行:僅在 AX1 目錄下失敗。ws2_32.dll 為禍首。Loaded "c:\windows\system32\WS2_32.DLL"(291 KB)Loaded "g:\aaa\program\WS2_32.DLL"(85 KB,殘缺版本)Windows DLL 搜索順序優先加載應用程序目錄下的同名 DLL。AX1 目錄下的 ws2_32.dll 版本不全,導致 Socket 功能不完整,OCI 連接過程中調用 Socket 失敗,Oracle 錯誤碼誤判為「目標主機不存在」。
刪除 AX1 程序目錄下的 ws2_32.dll,強制加載系統目錄 C:\Windows\System32\ws2_32.dll,連接即恢復正常。
補充:此問題僅在 XP 復現,Win 7 因 DLL 搜索順序機制不同不受影響。