動態鏈接庫的連接方式: 顯式鏈接,隱式鏈接
在命令行下運行當前目錄下(如C:\Documents and Settings\Tony\桌面\dll1\Debug),運行命令dumpbin,如果不能運行,說明環境找到損壞,利用vcvars32.bat(VC87 / VC7 目錄下Bin 文件夾直接拖入然后運行). 運行dumpbin -exports dll1.dll可以看到DLL中到處函數名.
Code:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
dll1.cpp:
_declspec(dllexport) int add(int a, int b )
{
???????return a+b;
}
_declspec(dllexport)int subtract(int a, int b)
{
???????return a-b;
}
_declspec(dllexport)表示為導出函數,可供應用程序調用。"extern C"表示,可以使用其他編程語言訪問dll中的函數.
編譯后可以得到DLL1.DLL文件.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
dlltest.dlg
extern int add(int x,int y);
extern int subtract(int x,int y);
//_declspec(dllimport) int add(int a, int b )
//_declspec(dllimport)int subtract(int a, int b)?? //這樣的方法告訴編譯器這些函數是從一個dll中調用的函數.編譯器就能調用相應的lib文件,提高運行效率
extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義
?CString str;
?str.Format("3+5=%d",add(3,5));
?MessageBox(str);
編譯器工程屬性LINK-->input-->additional dependencies 添加相應的lib文件,LINK-->input-->Module defintion file添加def文件.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
如何顯式的加載一個動態鏈接庫
動態加載不需要lib文件,只需要dll文件即可
HINSTANCE與HMODULE可以通用
HInstance hinst;
hinst = Loadlibrary("dll2.dll");???????? //顯式加載
typedef int (*ADDPROC)(int a , int b);??????????? //定義一個函數指針
ADDPROC Add = (ADDPROC)getprocAdress(hinst, "add");??? //獲得函數指針
if(!add)
{
???messagebox("fail");
}
else
{
????CString str;
????str.Format("3+5=%d",add(3,5));
????MessageBox(str);
}
posted on 2007-03-15 15:11
喬棟 閱讀(426)
評論(0) 編輯 收藏 引用 所屬分類:
C++的健身房