__declspec(dllimport)與(dllexport)以爲有什麼區別,但無論聲明是哪一個,或者在調用的時候故意指定不同的方式,調用都可以成功。
當動態鏈接庫沒有使用extern "C"的時候,使用Dependency 查看的時候爲?Test@@YAXXZ。這個時候使用LoadLibray("xx")-GetProcAddress()-FreeLibaray()是不能成功調用函數的。無法找到函數的入口地址。只能通過lib +頭文件 或lib+extern 函數原型的方式調用。
加上extern "C"後,函數形式爲 Test 非常的整潔。此時可以使用多種方法成功調用。
------------------------------------------------------------------------------------
如何從dll文件導出對應的lib文件?
Visual C++ 開發工具提供了兩個命令行工具,一個是dumpbin.exe,另一個是lib.exe。利用這兩個工具即可從dll導出其對應的lib。
1、在命令行執行:
dumpbin /exports yourdll.dll > yourdll.def
2、編輯 yourdll.def 文件,使之格式與.def文件格式一致。比如:
EXPORTS;
fn1;
fn2;
3、在命令行執行:
lib /def:yourdll.def /machine:i386 /out:yourdll.lib