1.2.3 ¾²Ì¬¿âÓÅȱµã
- ¾²Ì¬¿â¶Ôº¯Êý¿âµÄÁ´½ÓÊÇ·ÅÔÚ±àÒëʱÆÚÍê³ÉµÄ£¬¾²Ì¬¿âÔÚ³ÌÐòµÄÁ´½Ó½×¶Î±»¸´ÖƵ½Á˳ÌÐòÖУ¬ºÍ³ÌÐòÔËÐеÄʱºòûÓйØÏµ£»
- ³ÌÐòÔÚÔËÐÐʱÓ뺯Êý¿âÔÙÎ޹ϸð£¬ÒÆÖ²·½±ã¡£
- À˷ѿռäºÍ×ÊÔ´£¬ËùÓÐÏà¹ØµÄÄ¿±êÎļþÓëÇ£Éæµ½µÄº¯Êý¿â±»Á´½ÓºÏ³ÉÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£
|
ÄÚ´æºÍ´ÅÅ̿ռä
¾²Ì¬Á´½ÓÕâÖÖ·½·¨ºÜ¼òµ¥£¬ÔÀíÉÏÒ²ºÜÈÝÒ×Àí½â£¬ÔÚ²Ù×÷ϵͳºÍÓ²¼þ²»·¢´ïµÄÔçÆÚ£¬¾ø´ó²¿ÃÅϵͳ²ÉÓÃÕâÖÖ·½°¸¡£Ëæ×żÆËã»úÈí¼þµÄ·¢Õ¹£¬ÕâÖÖ·½·¨µÄȱµãºÜ¿ì±©Â¶³öÀ´£¬ÄǾÍÊǾ²Ì¬Á´½ÓµÄ·½Ê½¶ÔÓÚ¼ÆËã»úÄÚ´æºÍ´ÅÅ̿ռäÀ˷ѷdz£ÑÏÖØ¡£ÌرðÊÇ¶à½ø³Ì²Ù×÷ϵͳÏ£¬¾²Ì¬Á´½Ó¼«´óµÄÀË·ÑÁËÄÚ´æ¿Õ¼ä¡£ÔÚÏÖÔÚµÄlinuxϵͳÖУ¬Ò»¸öÆÕͨ³ÌÐò»áÓõ½cÓïÑÔ¾²Ì¬¿âÖÁÉÙÔÚ1MBÒÔÉÏ£¬ÄÇôÈç¹û´ÅÅÌÖÐÓÐ2000¸öÕâÑùµÄ³ÌÐò£¬¾ÍÒªÀ˷ѽ«½ü2GBµÄ´ÅÅ̿ռ䡣
³ÌÐò¿ª·¢ºÍ·¢²¼
¿Õ¼äÀË·ÑÊǾ²Ì¬Á´½ÓµÄÒ»¸öÎÊÌ⣬ÁíÒ»¸öÎÊÌâÊǾ²Ì¬Á´½Ó¶Ô³ÌÐòµÄ¸üС¢²¿ÊðºÍ·¢²¼Ò²»á´øÀ´ºÜ¶àÂé·³¡£±ÈÈç³ÌÐòÖÐËùʹÓõÄmylib.libÊÇÓÉÒ»¸öµÚÈý·½³§ÉÌÌṩµÄ£¬µ±¸Ã³§É̸üÐÂÈÝÁ¿mylib.libµÄʱºò£¬ÄÇôÎÒÃǵijÌÐò¾ÍÒªÄõ½×îаæµÄmylib.lib£¬È»ºó½«ÆäÖØÐ±àÒëÁ´½Óºó£¬½«ÐµijÌÐòÕû¸ö·¢²¼¸øÓû§¡£ÕâÑùµÄ×öȱµãºÜÃ÷ÏÔ£¬¼´Ò»µ©³ÌÐòÖÐÓÐÈκÎÄ£¿é¸üУ¬Õû¸ö³ÌÐò¾ÍÒªÖØÐ±àÒëÁ´½Ó¡¢·¢²¼¸øÓû§£¬Óû§ÒªÖØÐ°²×°Õû¸ö³ÌÐò¡£
1.3 vs϶¯Ì¬¿â´´½¨ºÍʹÓÃ
Òª½â¾ö¿Õ¼äÀ˷Ѻ͸üÐÂÀ§ÄÑÕâÁ½¸öÎÊÌ⣬×î¼òµ¥µÄ°ì·¨¾ÍÊǰѳÌÐòµÄÄ£¿éÏ໥·Ö¸î¿ªÀ´£¬ÐγɶÀÁ¢µÄÎļþ£¬¶ø²»Êǽ«ËûÃǾ²Ì¬µÄÁ´½ÓÔÚÒ»Æð¡£¼òµ¥µØ½²£¬¾ÍÊDz»¶ÔÄÄЩ×é³É³ÌÐòµÄÄ¿±ê³ÌÐò½øÐÐÁ´½Ó£¬µÈ³ÌÐòÔËÐеÄʱºò²Å½øÐÐÁ´½Ó¡£Ò²¾ÍÊÇ˵£¬°ÑÕû¸öÁ´½Ó¹ý³ÌÍÆ³Ùµ½ÁËÔËÐÐʱÔÙ½øÐУ¬Õâ¾ÍÊǶ¯Ì¬Á´½ÓµÄ»ù±¾Ë¼Ïë¡£
1.3.1 ¶¯Ì¬¿âµÄ´´½¨
1. ´´½¨Ò»¸öÐÂÏîÄ¿£¬ÔÚÒѰ²×°µÄÄ£°åÖÐÑ¡Ôñ“³£¹æ”£¬ÔÚÓұߵÄÀàÐÍÏÂÑ¡Ôñ“¿ÕÏîÄ¿”£¬ÔÚÃû³ÆºÍ½â¾ö·½°¸Ãû³ÆÖÐÊäÈëmydll¡£µã»÷È·¶¨¡£
2.ÔÚ½â¾ö·½°¸×ÊÔ´¹ÜÀíÆ÷µÄÍ·ÎļþÖÐÌí¼Ó,mydll.hÎļþ£¬ÔÚÔ´ÎļþÌí¼Ómydll.cÎļþ£¨¼´ÊµÏÖÎļþ£©¡£
3.ÔÚtest.hÎļþÖÐÌí¼ÓÈçÏ´úÂ룺
#ifndef TEST_H
#define TEST_H
__declspec(dllexport) int myminus(int a, int b);
#endif |
- ÔÚtest.cÎļþÖÐÌí¼ÓÈçÏ´úÂ룺
#include"test.h"
__declspec(dllexport) int myminus(int a, int b){
return a - b;
} |
5. ÅäÖÃÏîÄ¿ÊôÐÔ¡£ÒòΪÕâÊÇÒ»¸ö¶¯Ì¬Á´½Ó¿â£¬ËùÒÔÓ¦ÔÚÏîÄ¿ÊôÐԵēÅäÖÃÊôÐÔ”ÏÂÑ¡Ôñ“³£¹æ”£¬ÔÚÆäϵÄÅäÖÃÀàÐÍÖÐÑ¡Ôñ“¶¯Ì¬¿â£¨.dll£©¡£
6.±àÒëÉú³ÉеĽâ¾ö·½°¸£¬ÔÚDebugÎļþ¼ÐÏ»áµÃµ½mydll.dll (¶ÔÏóÎļþ¿â£©£¬½«¸Ã.dllÎļþ¡¢.libÎļþºÍÏàӦͷÎļþ¸øÓû§£¬Óû§¾Í¿ÉÒÔʹÓøÿâÀïµÄº¯ÊýÁË¡£
ÒÉÎÊÒ»£º__declspec(dllexport)ÊÇʲôÒâ˼£¿
¶¯Ì¬Á´½Ó¿âÖж¨ÒåÓÐÁ½ÖÖº¯Êý£ºµ¼³öº¯Êý(export function)ºÍÄÚ²¿º¯Êý(internal function)¡£ µ¼³öº¯Êý¿ÉÒÔ±»ÆäËüÄ£¿éµ÷Óã¬ÄÚ²¿º¯ÊýÔÚ¶¨ÒåËüÃǵÄDLL³ÌÐòÄÚ²¿Ê¹Óá£
ÒÉÎʶþ£º¶¯Ì¬¿âµÄlibÎļþºÍ¾²Ì¬¿âµÄlibÎļþµÄÇø±ð£¿
ÔÚʹÓö¯Ì¬¿âµÄʱºò£¬ÍùÍùÌṩÁ½¸öÎļþ£ºÒ»¸öÒýÈë¿â£¨.lib£©Îļþ£¨Ò²³Æ“µ¼Èë¿âÎļþ”£©ºÍÒ»¸öDLL£¨.dll£©Îļþ¡£ËäÈ»ÒýÈë¿âµÄºó׺ÃûÒ²ÊÇ“lib”£¬µ«ÊÇ£¬¶¯Ì¬¿âµÄÒýÈë¿âÎļþºÍ¾²Ì¬¿âÎļþÓÐ×ű¾ÖʵÄÇø±ð£¬¶ÔÒ»¸öDLLÎļþÀ´Ëµ£¬ÆäÒýÈë¿âÎļþ£¨.lib£©°üº¬¸ÃDLLµ¼³öµÄº¯ÊýºÍ±äÁ¿µÄ·ûºÅÃû£¬¶ø.dllÎļþ°üº¬¸ÃDLLʵ¼ÊµÄº¯ÊýºÍÊý¾Ý¡£ÔÚʹÓö¯Ì¬¿âµÄÇé¿öÏ£¬ÔÚ±àÒëÁ´½Ó¿ÉÖ´ÐÐÎļþʱ£¬Ö»ÐèÒªÁ´½Ó¸ÃDLLµÄÒýÈë¿âÎļþ£¬¸ÃDLLÖеĺ¯Êý´úÂëºÍÊý¾Ý²¢²»¸´ÖƵ½¿ÉÖ´ÐÐÎļþ£¬Ö±µ½¿ÉÖ´ÐгÌÐòÔËÐÐʱ£¬²ÅÈ¥¼ÓÔØËùÐèµÄDLL£¬½«¸ÃDLLÓ³Éäµ½½ø³ÌµÄµØÖ·¿Õ¼äÖУ¬È»ºó·ÃÎÊDLLÖе¼³öµÄº¯Êý¡£ |
1.3.2 ¶¯Ì¬¿âµÄʹÓÃ
·½·¨Ò»£ºÒþʽµ÷ÓÃ
´´½¨Ö÷³ÌÐòTestDll£¬½«mydll.h¡¢mydll.dllºÍmydll.lib¸´ÖƵ½Ô´´úÂëĿ¼Ï¡£
(P.S£ºÍ·ÎļþFunc.h²¢²»ÊDZØÐèµÄ£¬Ö»ÊÇC++ÖÐʹÓÃÍⲿº¯Êýʱ£¬ÐèÒªÏȽøÐÐÉùÃ÷)
ÔÚ³ÌÐòÖÐÖ¸¶¨Á´½ÓÒýÓÃÁ´½Ó¿â : #pragma comment(lib,"./mydll.lib") |
·½·¨¶þ£ºÏÔʽµ÷ÓÃ
HANDLE hDll; //ÉùÃ÷Ò»¸ödllʵÀýÎļþ¾ä±ú
hDll = LoadLibrary("mydll.dll"); //µ¼È붯̬Á´½Ó¿â
MYFUNC minus_test; //´´½¨º¯ÊýÖ¸Õë
//»ñÈ¡µ¼È뺯ÊýµÄº¯ÊýÖ¸Õë
minus_test = (MYFUNC)GetProcAddress(hDll, "myminus"); |
±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍC++Åàѵ
ѧԺËùÓУ¬»¶Ó×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
×÷ÕߣºÀÖÓã²¥¿ÍC/C++ÅàѵѧԺ
Ê×·¢£ºhttp://www.itcast.cn/c/