EVC建立DLL庫及呼叫

2021-07-02 03:30:51 字數 1912 閱讀 9287

wince下的dll有4種:1.wince dll 2.mfc regular dll 3.mfc extension dll 4. resource dll

wince dll:匯出函式使用標準c介面,可被mfc或非mfc程式呼叫

mfc regular dll:是使用mfc建立,匯出函式也使用標準c介面,可以被mfc或非mfc程式呼叫

mfc extension dll:可以建立mfc派生類,只能被mfc應用程式呼叫

resource dll:包含共享資源,如圖示,位圖,選單等

以下乙個簡單的例子介紹wince dll的建立方法:

1.新建乙個基於wce dynamic-link library,工程名sampledll

2.工程嚮導選擇a ****** windows ce dll project或a dll that exports some symbols,選擇後者會有框架及匯出函式示例**.

3.框架生成後,dllmain是dll的入口函式.以下是乙個匯出函式的示例:

[c-sharp]view plain

copy

extern

"c"sampledll_api 

void

testdll(

void

)    

extern "c"是能被c檔案呼叫,sampledll_api實際上就是__declspec(dllexport),表示輸出.

在sampledll.h中有定義:

[c-sharp]view plain

copy

#ifdef sampledll_exports

#define sampledll_api __declspec(dllexport)

#else

#define sampledll_api __declspec(dllimport)

#endif

乙個簡單的dll就建立好了.在arm ce平台上測試ok,注意ce需要新增mfc元件,如果用mfc程式測試的話.

下面就是建立乙個應用程式來測試了,我們使用動態呼叫的方式,靜態呼叫比較簡單,在工程設定裡新增sampledll.lib庫即可.

2.宣告將要載入的dll的控制代碼和被呼叫函式型別

[c-sharp]view plain

copy

hinstance m_hdll;  

typedef void

(*ptestdll)(

void

);  

3.新增兩個按鈕loaddll和freedll,按鈕執行函式如下:

[c-sharp]view plain

copy

void

csampledlltestmfcdlg::onloaddll()   

ptestdll m_ptestdll = (ptestdll)getprocaddress(m_hdll,_t("testdll"

));  

if(m_ptestdll == null)  

else

}  void

csampledlltestmfcdlg::onfreedll()   

}  

用到了3個api,loadlibrary用來載入dll,getprocaddress來獲得匯出函式指標,freelibrary用來釋放dll

mfc regular dll的建立方法基本類似,不同的是在每個dll匯出函式都應該先呼叫 

afx_manage_state(afxgetstaticmodulestate());

應用程式呼叫的方法和上面的方法一樣.

mfc extesion dll用來匯出類,最後在類名前新增afx_ext_class關鍵字.

C Builder建立及呼叫DLL

動態鏈結庫 dll 是windows程式設計常遇到的程式設計方法,下面我就介紹一下在 bcb c builder下簡稱bcb 中如何建立使用dll和一些技巧。一 建立 使用bcb file new建立乙個新的dll工程,並儲存好檔案bcb,生成乙個dll 的程式框架。1 dllentrypoint函...

VC中DLL的建立及呼叫方法

dll的建立 首先,用vc整合開發介面中的 新建 新建乙個專案。無論是vc6.0還是vc.net,都有建立dll專案的選項。只不過有些稍有不同,例如vc.net中就有isapi dll,擴充套件儲存過程dll等,這些都不在討論的範圍。例如我們建立了乙個用靜態連線mfc庫的dll專案,名稱為mydll...

VC中DLL的建立及呼叫方法

此中只有實際才操作,而無相關理論 首先,用 vc整合開發介面中的 新建 新建乙個專案。無論是 vc6.0 還是vc.net 都有建立 dll專案的選項。只不過有些稍有不同,例如 vc.net 中就有isapi dll 擴充套件儲存過程 dll等,這些都不在討論的範圍。例如我們建立了乙個用靜態連線 m...