DLL澶存枃浠剁殑鏍煎紡鍜屽簲鐢
鍙戝竷: 2008-6-26 14:30 | 浣滆: admin | 鏌ョ湅: 111娆
浣滆咃細姝︽眽甯備笢婀栦腑瀛 鏈辨捣娓 瀛熷妗
銆
1銆丏LL鐨勮捣婧
銆銆鍔ㄦ侀摼鎺ュ簱锛圖LL锛夋槸浠嶤璇█鍑芥暟搴撳拰Pascal搴撳崟鍏冪殑姒傚康鍙戝睍鑰屾潵鐨勩傛墍鏈夌殑C璇█鏍囧噯搴撳嚱鏁伴兘瀛樻斁鍦ㄦ煇涓鍑芥暟搴撲腑銆傚湪閾炬帴搴旂敤绋嬪簭鐨勮繃绋嬩腑锛岄摼鎺ュ櫒浠庡簱鏂囦欢涓嫹璐濈▼搴忚皟鐢ㄧ殑鍑芥暟浠g爜锛屽苟鎶婅繖浜涘嚱鏁颁唬鐮佹坊鍔犲埌鍙墽琛屾枃浠朵腑銆傝繖绉嶆柟娉曞悓鍙妸鍑芥暟鍌ㄥ瓨鍦ㄥ凡缂栬瘧鐨凮BJ鏂囦欢涓浉姣旀洿鏈夊埄浜庝唬鐮佺殑閲嶇敤銆
浣嗛殢鐫Windows杩欐牱鐨勫浠诲姟鐜鐨勫嚭鐜帮紝鍑芥暟搴撶殑鏂规硶鏄惧緱杩囦簬绱禈銆傚鏋滀负浜嗗畬鎴愬睆骞曡緭鍑恒佹秷鎭鐞嗐佸唴瀛樼鐞嗐佸璇濇绛夋搷浣滐紝姣忎釜绋嬪簭閮戒笉寰椾笉鎷ユ湁鑷繁鐨勫嚱鏁帮紝閭d箞Windows绋嬪簭灏嗗彉寰楅潪甯稿簽澶с俉indows鐨勫彂灞曡姹傚厑璁稿悓鏃惰繍琛岀殑鍑犱釜绋嬪簭鍏变韩涓缁勫嚱鏁扮殑鍗曚竴鎷疯礉銆傚姩鎬侀摼鎺ュ簱灏辨槸鍦ㄨ繖绉嶆儏鍐典笅鍑虹幇鐨勩傚姩鎬侀摼鎺ュ簱涓嶇敤閲嶅缂栬瘧鎴栭摼鎺ワ紝涓鏃﹁鍏ュ唴瀛橈紝DLL鍑芥暟鍙互琚郴缁熶腑鐨勪换浣曟鍦ㄨ繍琛岀殑搴旂敤绋嬪簭杞欢鎵浣跨敤锛岃屼笉蹇呭啀灏咲LL鍑芥暟鐨勫彟涓鎷疯礉瑁呭叆鍐呭瓨銆
2銆丏LL涓嚱鏁扮殑澹版槑
銆銆鏍规嵁寰蒋DLL鐨勭紪鍐欏拰璋冪敤瑙勮寖锛屽湪DLL涓紝澹版槑鍜屽畾涔夊鍑哄嚱鏁版椂锛岄渶瑕佸湪鍑芥暟鍓嶄娇鐢╛_declspec(dllexport)鍏抽敭瀛楋紝浠ヨ〃鏄庤鍑芥暟鏄疍LL鐨勫鍑哄嚱鏁帮紱鍦―LL鐨勯殣寮忚皟鐢ㄦ柟寮忎腑锛屽簲鐢ㄧ▼搴忓湪璋冪敤瀵煎嚭鍑芥暟鏃讹紝蹇呴』浣跨敤__declspec(dllimport)鍏抽敭瀛楀厛澹版槑瀵煎叆鐨勫嚱鏁般傝繖绉嶅鍏ュ拰瀵煎嚭鍑芥暟鐨勫0鏄庢柟娉曚篃绗﹀悎C/C++鐨勫嚱鏁扮殑鍏堝0鏄庡啀璋冪敤鐨勮皟鐢ㄨ鑼冦
3銆丏LL瀵煎嚭鍑芥暟鐨勯摼鎺ョ被鍒強寮曠敤鏂瑰紡
銆銆瀵煎嚭鍑芥暟鍦ㄧ紪璇戙侀摼鎺ヨ繃绋嬩腑锛屽彲浠ラ噰鐢–閾炬帴鍜孋++閾炬帴涓ょ鏂瑰紡锛屽綋閲囩敤C閾炬帴鏃讹紝缂栬瘧鍣ㄤ笉鏇存敼瀵煎嚭鍑芥暟鐨勫悕绉帮紝涓庝箣鐩稿弽锛屽綋閲囩敤C++閾炬帴鏃讹紝缂栬瘧鍣ㄥ垯鏇存敼瀵煎嚭鍑芥暟鐨勫悕绉般
銆銆瀵煎嚭鍑芥暟鍙互浣跨敤C璇█缂栧啓锛屼篃鍙互浣跨敤C++璇█缂栧啓銆傚浜庨噰鐢–璇█缂栧啓鐨勬墽琛屾枃浠惰岃█锛屽鏋滆皟鐢ㄩ噰鐢–++璇█缂栧啓鐨勫鍑哄嚱鏁帮紝搴斿綋寮哄埗鎸囧畾浣跨敤C閾炬帴鑰屼笉鏄疌++閾炬帴鐢熸垚瀵煎嚭鍑芥暟搴擄紱鑰屽浜庨噰鐢–++璇█缂栧啓鐨勬墽琛屾枃浠惰岃█锛屽鏋滆皟鐢ㄩ噰鐢–璇█缂栧啓鐨勫鍑哄嚱鏁帮紝搴斿綋寮哄埗鎸囧畾浣跨敤C閾炬帴鐢熸垚瀵煎嚭鍑芥暟搴撱傛牴鎹紪璇戝櫒瑙勮寖锛屾寚瀹氥佸0鏄庡嚱鏁颁娇鐢–閾炬帴锛屽垯搴斿綋鍦ㄥ嚱鏁板0鏄庡墠浣跨敤鍏抽敭瀛梕xtern "C"銆
銆銆閫氬父鎯呭喌涓嬶紝涓轰簡纭繚涓嶅悓鐨勮瑷缂栧啓鐨勫彲鎵ц妯″潡閮借兘澶熸纭湴璁块棶鍒板鍑哄嚱鏁帮紝涔犳儻涓婇兘閲囩敤extern "C"鏉ユ寚瀹氬鍑哄嚱鏁伴噰鐢–閾炬帴鏂瑰紡銆
4銆丏LL澶存枃浠舵牸寮
銆銆鍦ㄥ疄闄呯殑缂栫▼涓紝閫氬父閮芥槸鎶婂鍑哄嚱鏁扮殑澹版槑缁熶竴鏀惧湪涓涓ご鏂囦欢涓紝鑰屽叾瀹氫箟鍒欐牴鎹渶瑕佸垎甯冨湪涓嶅悓鐨凜PP鏂囦欢涓紝杩欐牱鐨勫疄鐜版柟寮忔瘮杈冩柟渚垮鏂囦欢鍙婂叾鍔熻兘鐨勭鐞嗗拰缁存姢銆傚洜姝わ紝DLL澶存枃浠剁殑鏍煎紡濡備笅锛
#ifndef _DLLMODULENAME_H
#define _DLLMODULENAME_H
锛庯紟锛庯紟锛庯紟
/*
*if using C++ Compiler to compile the file, adopting C linkage mode
*/
#ifdef __cplusplus
extern "C" {
#endif
// macro define __declspec(dllexport)
#define DLLMODULENAME_LIB_API __declspec(dllexport)
// define export functions
DLLMODULENAME_LIB_API returntype FuncName (parameters);
// ... more declarations as needs
#undef DLLMODULENAME_LIB_API
#ifdef __cplusplus
}
#endif
#endif
銆銆鏍规嵁寰蒋DLL闅愬紡璋冪敤鐨勮鑼冿紝鍦ㄤ娇鐢ㄥ鍑哄嚱鏁板墠锛屽簲褰撻鍏堝0鏄庤瀵煎嚭鍑芥暟銆傚湪瀹為檯缂栫▼涓紝澶у閲囩敤鍦ㄤ竴涓ご鏂囦欢涓紝缁熶竴澹版槑绋嬪簭杩愯涓皟鐢ㄥ埌鐨凞LL瀵煎嚭鍑芥暟锛岀劧鍚庡湪鎵鏈夎皟鐢―LL瀵煎嚭鍑芥暟鐨勬枃浠朵腑锛屽寘鍚澶存枃浠剁殑鏂瑰紡銆傚洜姝ゅ鍑哄嚱鏁扮殑寮曞叆澶存枃浠舵牸寮忓涓嬶細
#ifndef _IMPORTFUNC_H
#define _IMPORTFUNC_H
#ifdef __cplusplus
extern "C" {
#endif
// macro define __declspec(dllimport)
#define DLLMODULENAME_LIB_API __declspec(dllimport)
// define export functions
DLLMODULENAME_LIB_API returntype FuncName (parameters);
// ... more declarations as needs
#undef DLLMODULENAME_LIB_API
#ifdef __cplusplus
}
#endif
#endif
銆銆浠庝笂杩伴槓杩板彲浠ョ湅鍑猴紝瀵逛簬DLL瀵煎嚭鍑芥暟鑰岃█锛屽湪DLL澶存枃浠朵腑澹版槑浜嗕竴娆★紝鑰屽湪闅愬紡璋冪敤鏃讹紝鍙堝0鏄庝簡涓娆★紝涓烘秷闄よ繖绉嶉噸澶嶅0鏄庡拰鍑忓皯鏂囦欢鏁伴噺锛屽疄闄呭簲鐢ㄤ腑閫氬父灏嗕袱涓ご鏂囦欢鍚堝苟鎴愪竴涓狣LL澶存枃浠讹紝鍚屾椂瀹氫箟涓涓畯锛岀敤浜庢帶鍒跺嚱鏁板浜庡鍑哄0鏄庢垨璋冪敤瀵煎叆澹版槑鐘舵併傚浜嶥LL瀹氫箟鏂囦欢锛屽湪鍖呭惈DLL澶存枃浠朵箣鍓嶏紝棣栧厛瀹氫箟涓涓帶鍒跺畯锛岀敤浜庡0鏄庢墍鏈夌殑鍑芥暟涓哄鍑哄嚱鏁帮紱鑰屽湪闅愬紡璋冪敤涓紝鍦ㄥ寘鍚獶LL澶存枃浠舵椂涓嶉渶瑕佸畾涔夋帶鍒跺畯锛岀敤浜庡0鏄庢墍鏈夌殑鍑芥暟涓哄鍏ュ嚱鏁般傚洜姝ゆ渶缁堢殑DLL澶存枃浠舵牸寮忓涓嬶細
#ifndef _DLLMODULENAME_H
#define _DLLMODULENAME_H
#include <>
#include ""
/*
*if using C++ Compiler to compile the file, adopting C linkage mode
*/
#ifdef __cplusplus
extern "C" {
#endif
// according to the control macro, deciding whether export or import functions
#ifdef _DLLMODULENAME_
#define DLLMODULENAME_LIB_API __declspec(dllexport)
#else
#define DLLMODULENAME_LIB_API __declspec(dllimport)
#endif
// functions declarations
DLLMODULENAME_LIB_API returntype FuncName (parameters);
// ... more declarations as needs
#undef DLLMODULENAME_LIB_API
#ifdef __cplusplus
}
#endif
#endif
5銆丏LL澶存枃浠剁殑浣跨敤
銆銆DLL瀵煎嚭鍑芥暟鐨勯摼鎺ャ佸鍏ャ佸鍑烘寚绀虹鍦ㄥ嚱鏁扮涓娆″0鏄庢椂纭畾锛屽湪浠ュ悗鐨勫嚱鏁板0鏄庡拰瀹氫箟鏃讹紝鍑芥暟閮芥帴鍙楃涓娆″嚱鏁扮殑閾炬帴銆佸鍏ャ佸鍑哄0鏄庯紝涓嶅繀鍐嶆瀵瑰嚱鏁颁綔閾炬帴銆佸鍏ャ佸鍑哄0鏄庯紝鍥犳DLL瀵煎嚭鍑芥暟鐨勫畾涔夋枃浠朵腑锛屽彲浠ヤ娇鐢ㄥ涓嬬殑缂栫爜鏍煎紡锛
/*
*ensure compiler to compile correctly, through including
* the precompiled headers, or else resulting in C1010 error
*/
#include "stdafx.h"
#define _DLLMODULENAME_
#include "dllmodulename.h"
returntype FuncName (parameters)
{
// function body
}
// other functions definitions
銆銆鑰屽湪璋冪敤鏂囦欢涓紝鍙渶瑕佸寘鍚ご鏂囦欢鍗冲彲锛屽嵆浣跨敤#include "dllmodulename.h"璇彞瀹炵幇瀵笵LL瀵煎嚭鍑芥暟鐨勫鍏ュ0鏄庛
鍙傝冩枃鐚
Joseph M. Newcomer. The Ultimate (DLL) Header File锛寃ww.codeproject.com
銆奧indows鏍稿績缂栫▼銆嬬鍥涚増锛屾満姊板伐涓氬嚭鐗堢ぞ




发表于 2009-1-5 19:48
| 











