;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
DLL澶存枃浠剁殑鏍煎紡鍜屽簲鐢 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> vc鎺т欢 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

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鏍稿績缂栫▼銆嬬鍥涚増锛屾満姊板伐涓氬嚭鐗堢ぞ

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆