´«ÖDz¥¿Í_CÌá¸ß½²Òå

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/12/20 20:27:29ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

»¶Ó­ÔĶÁ

²ÉÓÃÒþʽÁ´½Ó·½Ê½£¬³ÌÐòÔ±ÔÚ½¨Á¢Ò»¸öDLLÎļþʱ£¬Á´½Ó³ÌÐò»á×Ô¶¯Éú³ÉÒ»¸öÓëÖ®¶ÔÓ¦µÄLIBµ¼ÈëÎļþ¡£¸ÃÎļþ°üº¬ÁËÿһ¸öDLLµ¼³öº¯ÊýµÄ·ûºÅÃûºÍ¿ÉÑ¡ µÄ±êʶºÅ£¬µ«ÊDz¢²»º¬ÓÐʵ¼ÊµÄ´úÂë¡£LIBÎļþ×÷ΪDLLµÄÌæ´úÎļþ±»±àÒëµ½Ó¦ÓóÌÐòÏîÄ¿ÖС£µ±³ÌÐòԱͨ¹ý¾²Ì¬Á´½Ó·½Ê½±àÒëÉú³ÉÓ¦ÓóÌÐòʱ£¬Ó¦ÓóÌÐòÖÐµÄ µ÷Óú¯ÊýÓëLIBÎļþÖе¼³ö·ûºÅÏàÆ¥Å䣬ÕâЩ·ûºÅ»ò±êʶºÅ½øÈëµ½Éú³ÉµÄEXEÎļþÖС£LIBÎļþÖÐÒ²°üº¬Á˶ÔÓ¦µÄDLLÎļþÃû£¨µ«²»ÊÇÍêÈ«µÄ·¾¶Ãû£©£¬Á´ ½Ó³ÌÐò½«Æä´æ´¢ÔÚEXEÎļþÄÚ²¿¡£µ±Ó¦ÓóÌÐòÔËÐйý³ÌÖÐÐèÒª¼ÓÔØDLLÎļþʱ£¬Windows¸ù¾ÝÕâЩÐÅÏ¢·¢ÏÖ²¢¼ÓÔØDLL£¬È»ºóͨ¹ý·ûºÅÃû»ò±êʶºÅʵÏÖ ¶ÔDLLº¯ÊýµÄ¶¯Ì¬Á´½Ó¡£

ÏÔʽÁ´½Ó·½Ê½¶ÔÓÚ¼¯³É»¯µÄ¿ª·¢ÓïÑÔ£¨ÀýÈçVB£©±È½ÏÊʺϡ£ÓÐÁËÏÔʽÁ´½Ó£¬³ÌÐòÔ±¾Í²»±ØÔÙʹÓõ¼ÈëÎļþ£¬¶øÊÇ Ö±½Óµ÷ÓÃWin32 µÄLoadLibaryº¯Êý£¬²¢Ö¸¶¨DLLµÄ·¾¶×÷Ϊ²ÎÊý¡£LoadLibary·µ»ØHINSTANCE²ÎÊý£¬Ó¦ÓóÌÐòÔÚµ÷Óà GetProcAddressº¯ÊýʱʹÓÃÕâÒ»²ÎÊý¡£

GetProcAddressº¯Êý½«·ûºÅÃû»ò±êʶºÅת»»ÎªDLLÄÚ²¿µÄµØÖ·¡£¼ÙÉèÓÐÒ»¸öµ¼³öÈçϺ¯ÊýµÄ DLLÎļþ£º

extern \

ÏÂÃæÊÇÓ¦ÓóÌÐò¶Ô¸Ãµ¼³öº¯ÊýµÄÏÔʽÁ´½ÓµÄÀý×Ó£º c====¡·Ó¦Óà win/linuxϵͳ±à³Ì api

typedef double(SQRTPROC)(double); HINSTANCE hInstance; SQRTPROC* pFunction; VERIFY(hInstance=::LoadLibrary(\VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,\double d=(*pFunction)(81.0);//µ÷ÓøÃDLLº¯Êý

ÔÚÒþʽÁ´½Ó·½Ê½ÖУ¬ËùÓб»Ó¦ÓóÌÐòµ÷ÓõÄDLLÎļþ¶¼»áÔÚÓ¦ÓóÌÐòEXEÎļþ¼ÓÔØÊ±±»¼ÓÔØÔÚµ½ÄÚ´æÖУ»µ«Èç¹û²ÉÓÃÏÔʽÁ´½Ó·½Ê½£¬³ÌÐòÔ±¿ÉÒÔ¾ö¶¨DLLÎÄ ¼þºÎʱ¼ÓÔØ»ò²»¼ÓÔØ¡£ÏÔʽÁ´½ÓÔÚÔËÐÐʱ¾ö¶¨¼ÓÔØÄĸöDLLÎļþ¡£ÀýÈ磬¿ÉÒÔ½«Ò»¸ö´øÓÐ×Ö·û´®×ÊÔ´µÄDLLÄ£¿éÒÔÓ¢Óï¼ÓÔØ£¬¶øÁíÒ»¸öÒÔÎ÷°àÑÀÓï¼ÓÔØ¡£Ó¦ÓÃ³Ì ÐòÔÚÓû§Ñ¡ÔñÁ˺ÏÊʵÄÓïÖÖºóÔÙ¼ÓÔØÓëÖ®¶ÔÓ¦µÄDLLÎļþ¡£

Èý¡¢Ê¹Ó÷ûºÅÃûÁ´½ÓÓë±êʶºÅÁ´½Ó

ÔÚWin16»·¾³ÖУ¬·ûºÅÃûÁ´½ÓЧÂʽϵͣ¬ËùÓÐÄÇʱ±êʶºÅÁ´½ÓÊÇÖ÷ÒªµÄÁ´½Ó·½Ê½¡£ÔÚWin32»·¾³ÖУ¬·ûºÅÃûÁ´½ÓµÄЧÂʵõ½Á˸ÄÉÆ¡£Microsoft ÏÖÔÚÍÆ¼öʹÓ÷ûºÅÃûÁ´½Ó¡£µ«ÔÚMFC¿âÖеÄDLL°æ±¾ÈÔÈ»²ÉÓõÄÊDZêʶºÅÁ´½Ó¡£Ò»¸öµäÐ͵ÄMFC³ÌÐò¿ÉÄÜ»áÁ´½Óµ½Êý°Ù¸öMFC DLLº¯ÊýÉÏ¡£²ÉÓñêʶºÅÁ´½ÓµÄÓ¦ÓóÌÐòµÄEXEÎļþÌåÏà¶Ô½ÏС£¬ÒòΪËü²»±Ø°üº¬µ¼È뺯ÊýµÄ³¤×Ö·û´®·ûºÅÃû¡£ ËÄ¡¢±àдDllMainº¯Êý

DllMainº¯ÊýÊÇDLLÄ£¿éµÄĬÈÏÈë¿Úµã¡£µ±Windows¼ÓÔØ DLLÄ£¿éʱµ÷ÓÃÕâÒ»º¯Êý¡£ÏµÍ³Ê×Ïȵ÷ÓÃÈ«¾Ö¶ÔÏóµÄ¹¹Ô캯Êý£¬È»ºóµ÷ÓÃÈ«¾Öº¯ÊýDLLMain¡£DLLMainº¯Êý²»½öÔÚ½«DLLÁ´½Ó¼ÓÔØµ½½ø³Ìʱ±»µ÷ Óã¬ÔÚDLLÄ£¿éÓë½ø³Ì·ÖÀëʱ£¨ÒÔ¼°ÆäËüʱºò£©Ò²±»µ÷Óá£ÏÂÃæÊÇÒ»¸ö¿ò¼ÜDLLMainº¯ÊýµÄÀý×Ó¡£

HINSTANCE g_hInstance; »¶Ó­ÔĶÁ

»¶Ó­ÔĶÁ

extern \{

if(dwReason==DLL_PROCESS_ATTACH) {

TRACE0(\//ÔÚÕâÀï½øÐгõʼ»¯ }

else if(dwReason=DLL_PROCESS_DETACH) {

TRACE0(\//ÔÚÕâÀï½øÐÐÇå³ý¹¤×÷ }

return 1;//³É¹¦ }

Èç¹û³ÌÐòԱûÓÐΪDLLÄ£¿é±àдһ¸öDLLMainº¯Êý£¬ÏµÍ³»á´ÓÆäËüÔËÐпâÖÐÒýÈëÒ»¸ö²»×öÈκβÙ×÷µÄȱʡDLLMainº¯Êý°æ±¾¡£ÔÚµ¥¸öÏß³ÌÆô¶¯ºÍÖÕֹʱ£¬DLLMainº¯ÊýÒ²±»µ÷Óá£ÕýÈçÓÉdwReason²ÎÊýËù±íÃ÷µÄÄÇÑù¡£

Î塢ģ¿é¾ä±ú

½ø³ÌÖеÄÿ¸öDLLÄ£¿é±»È«¾ÖΨһµÄ32×Ö½ÚµÄHINSTANCE¾ä±ú±êʶ¡£½ø³Ì×Ô¼º»¹ÓÐÒ»¸öHINSTANCE¾ä±ú¡£ËùÓÐÕâЩģ¿é¾ä±ú¶¼Ö»ÓÐÔÚÌØ¶¨µÄ ½ø³ÌÄÚ²¿ÓÐЧ£¬ËüÃÇ´ú±íÁËDLL»òEXEÄ£¿éÔÚ½ø³ÌÐéÄâ¿Õ¼äÖÐµÄÆðʼµØÖ·¡£ÔÚWin32ÖУ¬HINSTANCEºÍHMODULEµÄÖµÊÇÏàͬµÄ£¬Õâ¸öÁ½ÖÖÀà ÐÍ¿ÉÒÔÌæ»»Ê¹Ó᣽ø³ÌÄ£¿é¾ä±ú¼¸ºõ×ÜÊǵÈÓÚ0x400000£¬¶øDLLÄ£¿éµÄ¼ÓÔØµØÖ·µÄȱʡ¾ä±úÊÇ¡£Èç¹û³ÌÐòͬʱʹÓÃÁ˼¸¸öDLLÄ£ ¿é£¬Ã¿Ò»¸ö¶¼»áÓв»Í¬µÄHINSTANCEÖµ¡£ÕâÊÇÒòΪÔÚ´´½¨DLLÎļþʱָ¶¨Á˲»Í¬µÄ»ùµØÖ·£¬»òÕßÊÇÒòΪ¼ÓÔØ³ÌÐò¶ÔDLL´úÂë½øÐÐÁËÖØ¶¨Î»¡£ Ä£¿é¾ä±ú¶ÔÓÚ¼ÓÔØ×ÊÔ´ÌØ±ðÖØÒª¡£Win32 µÄFindResourceº¯ÊýÖдøÓÐÒ»¸öHINSTANCE²ÎÊý¡£EXEºÍDLL¶¼ÓÐÆä×Ô¼ºµÄ×ÊÔ´¡£Èç¹û³ÌÐòÐèÒªÀ´×ÔÓÚDLLµÄ×ÊÔ´£¬¾Í½«´Ë²ÎÊýÖ¸¶¨ÎªDLLµÄÄ£¿é¾ä±ú¡£Èç¹ûÐèÒªEXEÎļþÖаüº¬µÄ×ÊÔ´£¬¾ÍÖ¸¶¨EXEµÄÄ£¿é¾ä±ú¡£

µ«ÊÇÔÚʹÓÃÕâЩ¾ä±ú֮ǰ´æÔÚÒ»¸öÎÊÌ⣬ÄãÔõÑùµÃµ½ËüÃÇÄØ£¿Èç¹ûÐèÒªµÃµ½EXEÄ£¿é¾ä±ú£¬µ÷ÓôøÓÐNull²ÎÊýµÄWin32º¯ÊýGetModuleHandle£»Èç¹ûÐèÒªDLLÄ£¿é¾ä±ú£¬¾Íµ÷ÓÃÒÔDLLÎļþÃûΪ²ÎÊýµÄWin32º¯ÊýGetModuleHandle¡£

Áù¡¢Ó¦ÓóÌÐòÔõÑùÕÒµ½DLLÎļþ

Èç¹ûÓ¦ÓóÌÐòʹÓÃLoadLibraryÏÔʽÁ´½Ó£¬ÄÇôÔÚÕâ¸öº¯ÊýµÄ²ÎÊýÖпÉÒÔÖ¸¶¨DLLÎļþµÄÍêÕû·¾¶¡£Èç¹û²»Ö¸¶¨Â·¾¶£¬»òÊǽøÐÐÒþʽÁ´½Ó£¬Windows½«×ñÑ­ÏÂÃæµÄËÑË÷˳ÐòÀ´¶¨Î»DLL£º

1£® °üº¬EXEÎļþµÄĿ¼£¬ 2£® ½ø³ÌµÄµ±Ç°¹¤×÷Ŀ¼£¬ 3£® WindowsϵͳĿ¼£¬ 4£® WindowsĿ¼£¬

5£® ÁÐÔÚ»·¾³±äÁ¿ÖеÄһϵÁÐĿ¼¡£

»¶Ó­ÔĶÁ

»¶Ó­ÔĶÁ

ÕâÀïÓÐÒ»¸öºÜÈÝÒ×·¢Éú´íÎóµÄÏÝÚå¡£Èç¹ûÄãʹÓÃVC£«£«½øÐÐÏîÄ¿¿ª·¢£¬²¢ÇÒΪDLLÄ£¿éרÃÅ´´½¨ÁËÒ»¸öÏîÄ¿£¬È»ºó½«Éú³ÉµÄDLLÎļþ¿½±´µ½ÏµÍ³Ä¿Â¼Ï£¬´Ó Ó¦ÓóÌÐòÖе÷ÓÃDLLÄ£¿é¡£µ½Ä¿Ç°ÎªÖ¹£¬Ò»ÇÐÕý³£¡£½ÓÏÂÀ´¶ÔDLLÄ£¿é×öÁËһЩÐ޸ĺóÖØÐÂÉú³ÉÁËеÄDLLÎļþ£¬µ«ÄãÍü¼Ç½«ÐµÄDLLÎļþ¿½±´µ½ÏµÍ³Ä¿Â¼ Ï¡£ÏÂÒ»´Îµ±ÄãÔËÐÐÓ¦ÓóÌÐòʱ£¬ËüÈÔ¼ÓÔØÁËÀϰ汾µÄDLLÎļþ£¬Õâ¿ÉÒªµ±ÐÄ£¡

Æß¡¢µ÷ÊÔDLL³ÌÐò

µÄVC£«£«ÊÇ¿ª·¢ºÍDLL µÄÓÐЧ¹¤¾ß£¬Ö»Ðè´ÓDLLÏîÄ¿ÖÐÔËÐе÷ÊÔ³ÌÐò¼´¿É¡£µ±ÄãµÚÒ»´ÎÕâÑù²Ù×÷ʱ£¬µ÷ÊÔ³ÌÐò»áÏòÄãѯÎÊEXEÎļþµÄ·¾¶¡£´Ëºóÿ´ÎÔÚµ÷ÊÔ³ÌÐòÖÐÔËÐÐDLLʱ£¬µ÷ÊÔ ³ÌÐò»á×Ô¶¯¼ÓÔØ¸ÃEXEÎļþ¡£È»ºó¸ÃEXEÎļþÓÃÉÏÃæµÄËÑË÷ÐòÁз¢ÏÖDLLÎļþ£¬ÕâÒâζ×ÅÄã±ØÐëÉèÖÃPath»·¾³±äÁ¿ÈÃÆä°üº¬DLLÎļþµÄ´ÅÅÌ·¾¶£¬»òÕß Ò²¿ÉÒÔ½«DLLÎļþ¿½±´µ½ËÑË÷ÐòÁÐÖеÄĿ¼·¾¶Ï¡£ DLL·ÖÅäµÄÄÚ´æÈçºÎÔÚEXEÀïÃæÊÍ·Å ×ܽáÏÂÃæ¼¸¸öÒªµã£º 1. ±£Ö¤ÄÚ´æ·ÖÅäºÍÇå³ýµÄͳһÐÔ£ºÈç¹ûÒ»¸öDLLÌṩһ¸öÄܹ»·ÖÅäÄÚ´æµÄº¯Êý£¬ÄÇôÕâ¸öDLLͬʱӦ¸ÃÌṩһ¸öº¯ÊýÊÍ·ÅÕâЩÄÚ´æ¡£Êý¾ÝµÄ´´½¨ºÍÇå³ýÓ¦¸ÃÔÚͬһ¸ö²ã´ÎÉÏ¡£ Ôø¾­Óöµ½¹ýÕâÑùµÄÀý×Ó£ºÔÚdllÖзÖÅäÁËÒ»¿éÄÚ´æ,ͨ¹ýPostMessage½«ÆäµØÖ·´«¸øÓ¦Óá£È»ºóÓ¦ÓÃÈ¥ÊÍ·ÅËü,½á¹û×ÜÊDZ¨Òì³£¡£ 2.Èç¹ûexeÓà MFC Appwizard·½Ê½Éú³É£¬ dllÓÃwin32·½Ê½Éú³É£¬ÔòÔËÐÐʱ»á³öÏÖ´íÎó¡£½øÒ»²½Óõ¥²½¸ú×Ù£¬·¢ÏÖmfc·½Ê½ºÍwin32·½Ê½ÏµÄnew²Ù×÷·ûÊÇÓò»Í¬·½Ê½ÊµÏֵģ¬Ô´³ÌÐò·Ö±ðÔÚVCĿ¼µÄÎļþ Afxmem.cppºÍnew.cppÖС£ÓÐÐËȤµÄ»°¿ÉÒÔ×ÔÒѸú×Ùһϡ£ ÒòΪdllÊä³öº¯Êýºó£¬²¢²»ÖªµÀÊÇÄÄÒ»¸öÄ£Äâµ÷ÓÃËü£¬Òò´ËnewºÍdeleteÅä¶Ôʱ×îºÃÔÚÒ»¸öÎļþÖУ¬ÕâÑù¿ÉÒÔ±£Ö¤Ò»ÖÂÐÔ¡£

3. ÎÊÌâÖ÷ÒªÔÚÓÚDLLºÍEXEÖ÷³ÌÐòÖзÖÅäÄÚ´æµÄ¶Ñ²»Ò»Ñù£¬Äã¿ÉÒÔ²»ÓÃnewºÍdelete£¬¶øÊÇÓà 1£© ::HeapAlloc(::GetProcessHeap(),...)ºÍ::HeapFree(::GetProcessHeap(),...) 2£© ::GlobalAlloc()ºÍ::GlobalFree() ÕâÁ½¶ÔAPI£¬ÕâÑùÎÞÂÛÔÚDLLÖл¹ÊÇÔÚÖ÷³ÌÐòÖж¼ÊÇÔÚ½ø³ÌĬÈ϶ÑÖзÖÅ䣬¾Í²»»á³ö´íÁË¡£

4. »¹ÓÐÒ»¸ö°ì·¨£¬¾ÍÊǰÑdllµÄSettingsµÄC/C++Ñ¡ÏµÄCode GenerationµÄUse Run-time liberary¸Ä³ÉDebug Multithreaded DLL£¬ÔÚRelease°æ±¾ÖиijÉMultithreaded DLL£¬¾Í¿ÉÒÔÖ±½ÓʹÓÃnewºÍdeleteÁË¡£²»¹ýMFC¾Í²»ÄÜÓÃSharedģʽÁË¡£

»¶Ó­ÔĶÁ

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4 ceshi