在運行時調用動態鏈接庫 VS2010示例


  這里不再介紹動態鏈接庫概念等知識,純粹新建一個項目用來表述怎么在運行時調用動態鏈接庫,代碼中會給出相關注釋。開發工具用的是VS2010旗艦版。

一、創建動態鏈接庫項目:

1.新建項目——選擇Win32項目,輸入名稱后(這里我輸入的項目名稱為sunlib),然后選擇下一步,在隨后的應用程序類型中選擇 “DLL”,單擊完成,即可完成創建DLL項目

如下圖所示:

 

2.在DLL項目中添加導出函數,函數可以添加在dllmain.cpp中,也可以添加在sumlib.cpp中,這里添加在sumlib.cpp中:

//這里添加一個計算兩數和的導出函數
// extern "C"表示函數可以被C語言引用
// _declspec(dllexport)指定這是一個到處函數
extern "C"_declspec(dllexport) int sum(int a,int b)
{
    return a+b;
}

添加代碼后,啟動調試就可以在sumlib項目文件夾下的Debug文件夾下看到生成的sumlib.dll和sumlib.lib文件:

 

二、加載和使用DLL

1.新建一個基於對話框的MFC項目,命名為MFCEx7,界面設計如下圖:

2.使用加載時動態鏈接的程序需要導入庫(*.lib文件),在MFCEx7項目中,打開MFCEx7項目屬性框,依次選擇——連接器——輸入,在附加依賴項中添加sumlib.lib:

此時,需要把sumlib項目生成的sumlib.lib文件和sumlib.dll文件復制到MFCEx7項目文件夾下;

 

 3.為ADD按鈕添加點擊事件響應函數:

HINSTANCE hinstLib;
PROCSUM procsum;

BOOL  fFreeResult;

//加載DLL文件,獲取DLL句柄
hinstLib = LoadLibrary(L"sumlib.dll");

//句柄有效,獲取sum函數地址
if ( hinstLib != NULL )
{
    procsum = (PROCSUM)GetProcAddress(hinstLib,"sum");

    if( procsum != NULL )
    {
        CEdit *pSumEdit=(CEdit*)GetDlgItem(IDC_EDIT_SUM);         
        int a = GetDlgItemInt(IDC_EDIT_A);
        int b = GetDlgItemInt(IDC_EDIT_B);

        CString szSum;                               
        szSum.Format(_T("%d"),a+b);                
        pSumEdit->SetWindowText(szSum);         
    }

    fFreeResult = FreeLibrary(hinstLib);
}

 

4、編譯執行,即可運行成功。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM