LoadLibrary調用失敗原因

來源:互聯網
上載者:User

利用loadlibrary顯示裝載動態庫:

 

HINSTANCE hDll; //DLL控制代碼

hDll = LoadLibrary("user32.dll");

if(hDll != NULL)

{

}

 

結果總是直接跳出if,dll載入失敗

 

排除了其它問題後,通過以下語句調用成功

hDll = LoadLibrary(TEXT("user32.dll"));

 

經過一番百度google後發現,原來是字元格式設定惹的禍。

 

這裡的LoadLibrary實際使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字串(寬字元串),而非窄字串,如下:

 

#ifdef UNICODE

#define LoadLibrary  LoadLibraryW

#else

#define LoadLibrary  LoadLibraryA

#endif // !UNICODE

 

 

在C/C++代碼中,直接使用""定義的字串為窄位元組串,而windows標頭檔中提供的TEXT宏可以根據是否定義了UNICODE宏來自動選擇字串類型。

 

因此,利用TEXT宏使其自動選擇了正確的字元集,dll調用成功。

 

PS:LoadLibrary函數跟LoadLibraryEx函數裝載dll的機制不一樣,前者在裝載dll遇到與該dll依賴的其他dll時會自動裝載,而後者不會,網上有載入自己的dll無法成功的例子,排除路徑問題的話(最好全路徑),就要考慮該dll是否依賴到其它的dll。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.