很多時候第三方庫或其他項目提供的庫多數會以動態庫的形式提供dll以及相應的lib導入庫、頭文件,不過也有的只是提供dll和頭文件,或者也提供了def模塊定義(用於導出函數)文件,此時若使用將不得不調用LoadLibrary以及GetProcAddress以獲取一系列需要的函數,相對來說比較繁瑣;多數人更喜歡使用引入庫的方式。
此時需要通過提供的dll或者def文件來獲取lib導入庫文件,操作步驟如下:
1. 若只提供dll,則需通過dumpbin工具提取dll中導出的各個函數;
dumpbin /exports xxx.dll > xxx.def
2. 若xxx.def 文件不是標准的def模塊定義文件(事實上不是標准的),則修改為標准的格式,若提供了def文件則可以直接通過lib工具轉換提取lib引入庫文件;
lib /def:xxx.def /machine:x86 out/:xxx.lib 或 lib /def:xxx.def /machine:x64 out/:xxx.lib
以上分別為提取x86、x64位的引入庫文件;out為可選項,若忽略,則生成的lib引入庫文件的名稱同def文件名;
3. 此后便可使用引入庫的方式使用提供的庫。
事實上某些時候使用LoadLibrary方式可能比較友好,可以提供一些版本不一致的友好提示等,若采用引入庫方式,此時若版本不一致可能出現異常,直接導致程序崩潰的可能而沒有預兆、有意義的提示, 若不想使用太多的GetProcAddress又想友好一些,可以采用將導出接口封裝,即可通過結構體保存導出接口地址,此時當導出接口的時候可不再導出這些眾多接口,而是導出封裝后的一個或幾個接口而已;便於C接口或C++等調用,當然若只是給C++使用,則可直接導出類即可,這樣整個類的公用接口即可直接使用,也可以避免太多的GetProcAddress調用;
