一. 建立dll
1. 使用__declspec
(dllexport
)匯出函式或類。
note:確認logutilcpp_api已經定義。property pages->configuration properties->c/c++->preprocessor->preprocessor definitions.
#ifdef
logutilcpp_exports
#define
logutilcpp_api extern
"c"__declspec
(dllexport
)#else
#define logutilcpp_api extern "c"
__declspec(dllimport)
#endif
// this function is exported from the logutilcpp.dll
logutilcpp_api
void
printlog();
// this class is exported from the logutilcpp.dll
class
logutilcpp_api clogutilcpp
2. 使用def檔案匯出函式。
建立乙個普通的.h檔案和.cpp檔案,.h檔案如下:
#include
// todo: add your methods here.
void
logbegin(lpcwstr logfilename);
void
logerror(lpcwstr strformat,...);
void
loginfo(lpcwstr strformat,...);
void
logwarning(lpcwstr strformat,...);
void
logend();
def檔案格式如下:
library "logutilcpp"
description "logutilcpp.dll [get .bmp picture if it is failed]"
exports
logbegin @1
logerror @2
loginfo @3
logwarning @4
logend @5
3. 使用def檔案匯出類
4. 關於dllmain函式
使用vs嚮導建立乙個dll工程會自動產生乙個dllmain函式,如果你沒有更新(即沒有使用)這個dllmain函式,可以將它刪除掉。
當windows載入dll模組時呼叫這一函式。系統首先呼叫全域性物件的建構函式,然後呼叫全域性函式dllmain。如果程式設計師沒有為dll模組編寫乙個dllmain函式,系統會從其它執行庫中引入乙個不做任何操作的預設dllmain函式版本。在單個執行緒啟動和終止時,dllmain函式也被呼叫。
二. dll的使用
方法一步驟:
1. reference dll工程。
2. 包含dll的標頭檔案。
3. 像普通的成員函式一樣使用。
方法二步驟:
1.將dll的標頭檔案,.lib檔案,.dll檔案拷到當前工程資料夾中。
2.包含dll的標頭檔案。
3.property pages->configuration properties->linker->input->additional dependencies 新增.lib檔案。
4.像普通函式一樣使用。
方法三步驟:
1.將.dll檔案拷到當前工程資料夾中。
2.使用動態呼叫的方式使用,例項如下:
typedef
void
(* printflogwarning)(lpcwstr,...);
hinstance hinstlib = loadlibrary(l
"logutillcpp.dll"
);if
(hinstlib)
printflogwarning plogwarning = (printflogwarning)getprocaddress (hinstlib,
"logwarning"
);plogwarning(l
"log warning."
);freelibrary(hinstlib);
建立DLL函式及其使用DLL
如果想要匯出乙個全域性函式,就用關鍵字來宣告 declspec dllexport 注意 這是vc自己特有的關鍵字,在linux下不可用。declspec dllexport int add int a,int b return a b 配置生成my.dll和my.lib檔案 在main.cpp中 ...
DLL的建立和使用
我們將建立的第一種型別的庫是動態鏈結庫 dll 使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練涵蓋以下內容 建立新的動態鏈結庫 dll 專案。向動態鏈結庫新增類。建立引用動態鏈結庫的應用程式...
建立和使用DLL
首先建立個dll工程 win32控制台 dll工程 新增標頭檔案和cpp檔案,如下 ifndef dll test h define dll test h class declspec dllexport ctest endif include dll test.h include ctest ct...