1.用__declspec (dllexport) 約定來匯出dll函式
建立乙個edrlib動態連線庫專案:
/*edrlib.h檔案*/
#ifdef __cplusplus
#define export extern "c" __declspec (dllexport) //如是 c++編譯則用extern"c"限制其為c模式編譯
#else
#define export __declspec (dllexport)
#endif
export bool callback edrcentertext (hdc, prect, pcstr) ;
export bool callback msgbox (pcstr);
/*edrlib.c檔案*/
#include
#include "edrlib.h"
int winapi dllmain (hinstance hinstance, dword fdwreason, pvoid pvreserved)
return true ;
} export bool callback edrcentertext(hdc hdc, prect prc, pcstr pstring)
export bool callback msgbox (pcstr pstring)
這樣就生成了乙個edrlib.lib,edrlib.dll
在專案中使用:
1.1通過edrlib.lib引用連線庫來使用
edrlib.lib放置到settings->link->input->object/libary modules中,並設定additional library path路徑正確.
**如下 :
/*test.c檔案*/
#include "stdafx.h"
#include "../edrlib/edrlib.h" //引用標頭檔案
/*省略一些***/
edrcentertexta (hdc, &rect,text ("呼叫dll介面輸出資訊")) ;//可以直接使用該函式
/*省略一些***/
1.2通過loadlibrary來動態載入,但這裡請用dll函式檢視器,看清楚dll對外提供的函式介面名.
/*test.c檔案*/
#include "stdafx.h"
#include "resource.h"
typedef bool (__stdcall* edrcentertexta)(hdc,prect,pcstr); //定義資料型別
typedef bool (__stdcall* msgbox)(pcstr);
/*省略一些***/
hmodule hdlllib = loadlibrary("edrlib.dll");//載入成功
edrcentertexta edrcentertext2 = (edrcentertexta)getprocaddress(hdlllib,"_edrcentertext@12");
edrcentertext2(hdc, &rect,"hello") ;
freelibrary(hdlllib);
/*省略一些***/
2.用*.def檔案匯出dll函式
*.def檔案說明:http://msdn.microsoft.com/zh-cn/library/28d6s79h(vs.80).aspx
/*edrlib.h檔案*/
#ifdef __cplusplus
#define export extern "c" //如是 c++編譯則用extern"c"限制其為c模式編譯
#else
#define export
#endif
export bool edrcentertext (hdc, prect, pcstr) ;
export bool msgbox (lpctstr);
/*edrlib.def檔案*/
library edrlib.dll
description '(c)2008-2009 yan'
version '1.0.0.1'
exports
msgbox @1 private
edrcentertext @2 private
我們可以通過1.1的方法來使用,但是要把edrlib.def檔案引用到test使用專案中去,project->settings->link ->projcet options 加入/def:edrlib.def
]深入淺出visual c++動態鏈結庫(dll)程式設計:http://langzi0115.bokee.com/6508109.html
VC編寫DLL幾種方法的簡介
可欣 動態連線庫最大的特點就是能節省磁碟空間.當多個程序共享同乙個dll的時候,記憶體中只有乙個dll的 通過對映來使各個程序得以呼叫.1.用vc建立乙個win32 dll 我們利用vc編寫dll有幾種方法.如果用vc建立乙個win32 dll 工程.那這個工程就應該只匯出c 的類或全域性變數.和全...
C split 幾種使用方法
第一種方法 string s abcdeabcdeabcde string sarray s.split c foreach string i in sarray console.writeline i.tostring console.readkey 輸出下面的結果 abdeab deab de第...
C split 幾種使用方法
第一種方法 string s abcdeabcdeabcde string sarray s.split c foreach string i in sarray console.writeline i.tostring console.readkey 輸出下面的結果 abdeab deab de第...