²é¿´: 1008  |  »Ø¸´: 11
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

zsglly

ľ³æ (ÖøÃûдÊÖ)

[½»Á÷] ÎÒµÄDll(¶¯Ì¬Á´½Ó¿â)ѧϰ±Ê¼Ç

DLL(Dynamic Link Libraries)רÌ⣺

    ±È½Ï´óµÄÓ¦ÓóÌÐò¶¼ÓɺܶàÄ£¿é×é³É£¬ÕâЩģ¿é·Ö±ðÍê³ÉÏà¶Ô¶ÀÁ¢µÄ¹¦ÄÜ£¬ËüÃDZ˴ËЭ×÷À´Íê³ÉÕû¸öÈí¼þϵͳµÄ¹¤×÷¡£¿ÉÄÜ´æÔÚһЩģ¿éµÄ¹¦ÄܽÏΪͨÓã¬ÔÚ¹¹ÔìÆäËüÈí¼þϵͳʱÈԻᱻʹÓá£ÔÚ¹¹ÔìÈí¼þϵͳʱ£¬Èç¹û½«ËùÓÐÄ£¿éµÄÔ´´úÂë¶¼¾²Ì¬±àÒëµ½Õû¸öÓ¦ÓóÌÐòEXEÎļþÖУ¬»á²úÉúһЩÎÊÌ⣺һ¸öȱµãÊÇÔö¼ÓÁËÓ¦ÓóÌÐòµÄ´óС£¬Ëü»áÕ¼Óøü¶àµÄ´ÅÅ̿ռ䣬³ÌÐòÔËÐÐʱҲ»áÏûºÄ½Ï´óµÄÄÚ´æ¿Õ¼ä£¬Ôì³Éϵͳ×ÊÔ´µÄÀË·Ñ£»ÁíÒ»¸öȱµãÊÇ£¬ÔÚ±àд´óµÄEXE³ÌÐòʱ£¬ÔÚÿ´ÎÐÞ¸ÄÖØ½¨Ê±¶¼±ØÐëµ÷Õû±àÒëËùÓÐÔ´´úÂ룬Ôö¼ÓÁ˱àÒë¹ý³ÌµÄ¸´ÔÓÐÔ£¬Ò²²»ÀûÓÚ½×¶ÎÐԵĵ¥Ôª²âÊÔ¡£  

    Windowsϵͳƽ̨ÉÏÌṩÁËÒ»ÖÖÍêÈ«²»Í¬µÄ½ÏÓÐЧµÄ±à³ÌºÍÔËÐл·¾³£¬Äã¿ÉÒÔ½«¶ÀÁ¢µÄ³ÌÐòÄ£¿é´´½¨Îª½ÏСµÄDLL(Dynamic Linkable Library)Îļþ£¬²¢¿É¶ÔËüÃǵ¥¶À±àÒëºÍ²âÊÔ¡£ÔÚÔËÐÐʱ£¬Ö»Óе±EXE³ÌÐòȷʵҪµ÷ÓÃÕâЩDLLÄ£¿éµÄÇé¿öÏ£¬ÏµÍ³²Å»á½«ËüÃÇ×°ÔØµ½ÄÚ´æ¿Õ¼äÖС£ÕâÖÖ·½Ê½²»½ö¼õÉÙÁËEXEÎļþµÄ´óСºÍ¶ÔÄÚ´æ¿Õ¼äµÄÐèÇ󣬶øÇÒʹÕâЩDLLÄ£¿é¿ÉÒÔͬʱ±»¶à¸öÓ¦ÓóÌÐòʹÓá£Windows×Ô¼º¾Í½«Ò»Ð©Ö÷ÒªµÄϵͳ¹¦ÄÜÒÔDLLÄ£¿éµÄÐÎʽʵÏÖ¡£  

    Ò»°ãÀ´Ëµ£¬DLLÊÇÒ»ÖÖ´ÅÅÌÎļþ£¬ÒÔ.DLL¡¢.DRV¡¢.FON¡¢.SYSºÍÐí¶àÒÔ.EXEΪÀ©Õ¹ÃûµÄϵͳÎļþ¶¼¿ÉÒÔÊÇDLL¡£ËüÓÉÈ«¾ÖÊý¾Ý¡¢·þÎñº¯ÊýºÍ×ÊÔ´×é³É£¬ÔÚÔËÐÐʱ±»ÏµÍ³¼ÓÔØµ½½ø³ÌµÄÐéÄâ¿Õ¼äÖУ¬³ÉΪµ÷Óýø³ÌµÄÒ»²¿·Ö¡£Èç¹ûÓëÆäËüDLLÖ®¼äûÓгåÍ»£¬¸ÃÎļþͨ³£Ó³Éäµ½½ø³ÌÐéÄâ¿Õ¼äµÄͬһµØÖ·ÉÏ¡£DLLÄ£¿éÖаüº¬¸÷ÖÖµ¼³öº¯Êý£¬ÓÃÓÚÏòÍâ½çÌṩ·þÎñ¡£DLL¿ÉÒÔÓÐ×Ô¼ºµÄÊý¾Ý¶Î£¬µ«Ã»ÓÐ×Ô¼ºµÄ¶ÑÕ»£¬Ê¹ÓÃÓëµ÷ÓÃËüµÄÓ¦ÓóÌÐòÏàͬµÄ¶Ñջģʽ£»Ò»¸öDLLÔÚÄÚ´æÖÐÖ»ÓÐÒ»¸öʵÀý£»DLLʵÏÖÁË´úÂë·â×°ÐÔ£»DLLµÄ±àÖÆÓë¾ßÌåµÄ±à³ÌÓïÑÔ¼°±àÒëÆ÷Î޹ء£  

    ÔÚWin32»·¾³ÖУ¬Ã¿¸ö½ø³Ì¶¼¸´ÖÆÁË×Ô¼ºµÄ¶Á/дȫ¾Ö±äÁ¿¡£Èç¹ûÏëÒªÓëÆäËü½ø³Ì¹²ÏíÄڴ棬±ØÐëʹÓÃÄÚ´æÓ³ÉäÎļþ»òÕßÉùÃ÷Ò»¸ö¹²ÏíÊý¾Ý¶Î¡£DLLÄ£¿éÐèÒªµÄ¶ÑÕ»ÄÚ´æ¶¼ÊÇ´ÓÔËÐнø³ÌµÄ¶ÑÕ»ÖзÖÅä³öÀ´µÄ¡£WindowsÔÚ¼ÓÔØDLLÄ£¿éʱ½«½ø³Ìº¯Êýµ÷ÓÃÓëDLLÎļþµÄµ¼³öº¯ÊýÏàÆ¥Åä¡£Windows²Ù×÷ϵͳ¶ÔDLLµÄ²Ù×÷½ö½öÊǰÑDLLÓ³Éäµ½ÐèÒªËüµÄ½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äÀïÈ¥¡£DLLº¯ÊýÖеĴúÂëËù´´½¨µÄÈκζÔÏ󣨰üÀ¨±äÁ¿£©¶¼¹éµ÷ÓÃËüµÄÏ̻߳ò½ø³ÌËùÓÐ.         

Ò»¡¢¹ØÓÚµ÷Ó÷½Ê½£º

1¡¢¾²Ì¬µ÷Ó÷½Ê½£ºÓɱàÒëϵͳÍê³É¶ÔDLLµÄ¼ÓÔØºÍÓ¦ÓóÌÐò½áÊøÊ±DLLÐ¶ÔØµÄ±àÂ루È绹ÓÐÆäËü³ÌÐòʹÓøÃDLL£¬ÔòWindows¶ÔDLLµÄÓ¦ÓüǼ¼õ1£¬Ö±µ½ËùÓÐÏà¹Ø³ÌÐò¶¼½áÊø¶Ô¸ÃDLLµÄʹÓÃʱ²ÅÊÍ·ÅËü£©£¬¼òµ¥ÊµÓ㬵«²»¹»Áé»î£¬Ö»ÄÜÂú×ãÒ»°ãÒªÇó¡£

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

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-3 at 08:06 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

2¡¢¶¯Ì¬µ÷Ó÷½Ê½£ºÊÇÓɱà³ÌÕßÓÃAPIº¯Êý¼ÓÔØºÍÐ¶ÔØDLLÀ´´ïµ½µ÷ÓÃDLLµÄÄ¿µÄ£¬Ê¹ÓÃÉϽϸ´ÔÓ£¬µ«Äܸü¼ÓÓÐЧµØÊ¹ÓÃÄڴ棬ÊDZàÖÆ´óÐÍÓ¦ÓóÌÐòʱµÄÖØÒª·½Ê½¡£

ÏÔʽµÄµ÷ÓãºÊÇÖ¸ÔÚÓ¦ÓóÌÐòÖÐÓÃLoadLibrary»òMFCÌṩµÄAfxLoadLibraryÏÔʽµÄ½«×Ô¼ºËù×öµÄ¶¯Ì¬Á¬½Ó¿âµ÷½øÀ´£¬¶¯Ì¬Á¬½Ó¿âµÄÎļþÃû¼´ÊÇÉÏÃæÁ½¸öº¯ÊýµÄ²ÎÊý£¬ÔÙÓÃGetProcAddress()»ñÈ¡ÏëÒªÒýÈëµÄº¯Êý¡£×Ô´Ë£¬Äã¾Í¿ÉÒÔÏóʹÓÃÈçͬ±¾Ó¦ÓóÌÐò×Ô¶¨ÒåµÄº¯ÊýÒ»ÑùÀ´µ÷ÓôËÒýÈ뺯ÊýÁË¡£ÔÚÓ¦ÓóÌÐòÍ˳ö֮ǰ£¬Ó¦¸ÃÓÃFreeLibrary»òMFCÌṩµÄAfxFreeLibraryÊͷŶ¯Ì¬Á¬½Ó¿â¡£Ö±½Óµ÷ÓÃWin32 µÄLoadLibaryº¯Êý£¬²¢Ö¸¶¨DLLµÄ·¾¶×÷Ϊ²ÎÊý¡£LoadLibary·µ»ØHINSTANCE²ÎÊý£¬Ó¦ÓóÌÐòÔÚµ÷ÓÃGetProcAddressº¯ÊýʱʹÓÃÕâÒ»²ÎÊý¡£GetProcAddressº¯Êý½«·ûºÅÃû»ò±êʶºÅת»»ÎªDLLÄÚ²¿µÄµØÖ·¡£³ÌÐòÔ±¿ÉÒÔ¾ö¶¨DLLÎļþºÎʱ¼ÓÔØ»ò²»¼ÓÔØ£¬ÏÔʽÁ´½ÓÔÚÔËÐÐʱ¾ö¶¨¼ÓÔØÄĸöDLLÎļþ¡£Ê¹ÓÃDLLµÄ³ÌÐòÔÚʹÓÃ֮ǰ±ØÐë¼ÓÔØ£¨LoadLibrary£©¼ÓÔØDLL´Ó¶øµÃµ½Ò»¸öDLLÄ£¿éµÄ¾ä±ú£¬È»ºóµ÷ÓÃGetProcAddressº¯ÊýµÃµ½Êä³öº¯ÊýµÄÖ¸Õ룬ÔÚÍ˳ö֮ǰ±ØÐëÐ¶ÔØDLL(FreeLibrary)¡£

    Windows½«×ñÑ­ÏÂÃæµÄËÑË÷˳ÐòÀ´¶¨Î»DLL£º  
1£®°üº¬EXEÎļþµÄĿ¼£¬  
2£®½ø³ÌµÄµ±Ç°¹¤×÷Ŀ¼£¬  
3£®WindowsϵͳĿ¼£¬  
4£®WindowsĿ¼£¬  
5£®ÁÐÔÚPath»·¾³±äÁ¿ÖеÄһϵÁÐĿ¼¡£

¶þ¡¢MFCÖеÄdll£º

a¡¢Non-MFC DLL:Ö¸µÄÊDz»ÓÃMFCµÄÀà¿â½á¹¹£¬Ö±½ÓÓÃCÓïÑÔдµÄDLL£¬ÆäÊä³öµÄº¯ÊýÒ»°ãÓõÄÊDZê×¼C½Ó¿Ú£¬²¢Äܱ»·ÇMFC»òMFC±àдµÄÓ¦ÓóÌÐòËùµ÷Óá£

b¡¢Regular DLL:ºÍÏÂÊöµÄExtension DllsÒ»Ñù£¬ÊÇÓÃMFCÀà¿â±àдµÄ¡£Ã÷ÏÔµÄÌØµãÊÇÔÚÔ´ÎļþÀïÓÐÒ»¸ö¼Ì³ÐCWinAppµÄÀà¡£ÆäÓÖ¿Éϸ·Ö³É¾²Ì¬Á¬½Óµ½MFCºÍ¶¯Ì¬Á¬½Óµ½MFCÉϵġ£

¾²Ì¬Á¬½Óµ½MFCµÄ¶¯Ì¬Á¬½Ó¿âÖ»±»VCµÄרҵ°ãºÍÆóÒµ°æËùÖ§³Ö¡£¸ÃÀàDLLÓ¦ÓóÌÐòÀïÍ·µÄÊä³öº¯Êý¿ÉÒÔ±»ÈÎÒâWin32³ÌÐòʹÓ㬰üÀ¨Ê¹ÓÃMFCµÄÓ¦ÓóÌÐò¡£ÊäÈ뺯ÊýÓÐÈçÏÂÐÎʽ£º
extern "C" EXPORT YourExportedFunction( );
Èç¹ûûÓÐextern ¡°C¡±ÐÞÊΣ¬Êä³öº¯Êý½ö½öÄÜ´ÓC++´úÂëÖе÷Óá£
DLLÓ¦ÓóÌÐò´ÓCWinAppÅÉÉú£¬µ«Ã»ÓÐÏûϢѭ»·¡£

¶¯Ì¬Á´½Óµ½MFCµÄ¹æÔòDLLÓ¦ÓóÌÐòÀïÍ·µÄÊä³öº¯Êý¿ÉÒÔ±»ÈÎÒâWin32³ÌÐòʹÓ㬰üÀ¨Ê¹ÓÃMFCµÄÓ¦ÓóÌÐò¡£µ«ÊÇ£¬ËùÓдÓDLLÊä³öµÄº¯ÊýÓ¦¸ÃÒÔÈçÏÂÓï¾ä¿ªÊ¼£º
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
´ËÓï¾äÓÃÀ´ÕýÈ·µØÇл»MFCÄ£¿é״̬¡£

Regular DLLÄܹ»±»ËùÓÐÖ§³ÖDLL¼¼ÊõµÄÓïÑÔËù±àдµÄÓ¦ÓóÌÐòËùµ÷Óá£ÔÚÕâÖÖ¶¯Ì¬Á¬½Ó¿âÖУ¬Ëü±ØÐëÓÐÒ»¸ö´ÓCWinApp¼Ì³ÐÏÂÀ´µÄÀ࣬DllMainº¯Êý±»MFCËùÌṩ£¬²»ÓÃ×Ô¼ºÏÔʽµÄд³öÀ´¡£

c¡¢Extension DLL:ÓÃÀ´ÊµÏÖ´ÓMFCËù¼Ì³ÐÏÂÀ´µÄÀàµÄÖØÐÂÀûÓã¬Ò²¾ÍÊÇ˵£¬ÓÃÕâÖÖÀàÐ͵Ķ¯Ì¬Á¬½Ó¿â£¬¿ÉÒÔÓÃÀ´Êä³öÒ»¸ö´ÓMFCËù¼Ì³ÐÏÂÀ´µÄÀà¡£ËüÊä³öµÄº¯Êý½ö¿ÉÒÔ±»Ê¹ÓÃMFCÇÒ¶¯Ì¬Á´½Óµ½MFCµÄÓ¦ÓóÌÐòʹÓ᣿ÉÒÔ´ÓMFC¼Ì³ÐÄãËùÏëÒªµÄ¡¢¸üÊÊÓÚÄã×Ô¼ºÓõÄÀ࣬²¢°ÑËüÌṩ¸øÄãµÄÓ¦ÓóÌÐò¡£ÄãÒ²¿ÉËæÒâµÄ¸øÄãµÄÓ¦ÓóÌÐòÌṩMFC»òMFC¼Ì³ÐÀàµÄ¶ÔÏóÖ¸Õë¡£Extension DLLʹÓÃMFCµÄ¶¯Ì¬Á¬½Ó°æ±¾Ëù´´½¨µÄ£¬²¢ÇÒËüÖ»±»ÓÃMFCÀà¿âËù±àдµÄÓ¦ÓóÌÐòËùµ÷Óá£Extension DLLs ºÍRegular DLLs²»Ò»Ñù£¬ËüûÓÐÒ»¸ö´ÓCWinApp¼Ì³Ð¶øÀ´µÄÀàµÄ¶ÔÏó£¬ËùÒÔ£¬Äã±ØÐëΪ×Ô¼ºDllMainº¯ÊýÌí¼Ó³õʼ»¯´úÂëºÍ½áÊø´úÂë¡£

ºÍ¹æÔòDLLÏà±È£¬ÓÐÒÔϲ»Í¬£º

1¡¢ËüûÓÐÒ»¸ö´ÓCWinAppÅÉÉúµÄ¶ÔÏó£»
2¡¢Ëü±ØÐëÓÐÒ»¸öDllMainº¯Êý£»
3¡¢DllMainµ÷ÓÃAfxInitExtensionModuleº¯Êý£¬±ØÐë¼ì²é¸Ãº¯ÊýµÄ·µ»ØÖµ£¬Èç¹û·µ»Ø0£¬DllMmainÒ²·µ»Ø0£»
4¡¢Èç¹ûËüÏ£ÍûÊä³öCRuntimeClassÀàÐ͵ĶÔÏó»òÕß×ÊÔ´(Resources)£¬ÔòÐèÒªÌṩһ¸ö³õʼ»¯º¯ÊýÀ´´´½¨Ò»¸öCDynLinkLibrary¶ÔÏó¡£²¢ÇÒ£¬ÓбØÒª°Ñ³õʼ»¯º¯ÊýÊä³ö£»
5¡¢Ê¹ÓÃÀ©Õ¹DLLµÄMFCÓ¦ÓóÌÐò±ØÐëÓÐÒ»¸ö´ÓCWinAppÅÉÉúµÄÀ࣬¶øÇÒ£¬Ò»°ãÔÚInitInstanceÀïµ÷ÓÃÀ©Õ¹DLLµÄ³õʼ»¯º¯Êý¡£

Èý¡¢dllÈë¿Úº¯Êý£º

1¡¢Ã¿Ò»¸öDLL±ØÐëÓÐÒ»¸öÈë¿Úµã£¬DllMainÊÇÒ»¸öȱʡµÄÈë¿Úº¯Êý¡£DllMain¸ºÔð³õʼ»¯(Initialization)ºÍ½áÊø(Termination)¹¤×÷£¬Ã¿µ±Ò»¸öеĽø³Ì»òÕ߸ýø³ÌµÄеÄÏ̷߳ÃÎÊDLLʱ£¬»òÕß·ÃÎÊDLLµÄÿһ¸ö½ø³Ì»òÕßÏ̲߳»ÔÙʹÓÃDLL»òÕß½áÊøÊ±£¬¶¼»áµ÷ÓÃDllMain¡£µ«ÊÇ£¬Ê¹ÓÃTerminateProcess»òTerminateThread½áÊø½ø³Ì»òÕßỊ̈߳¬²»»áµ÷ÓÃDllMain¡£

DllMainµÄº¯ÊýÔ­ÐÍ£º
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch(ul_reason_for_call)  
{
case DLL_PROCESS_ATTACH:
.......
case DLL_THREAD_ATTACH:
.......
case DLL_THREAD_DETACH:
.......
case DLL_PROCESS_DETACH:
.......
return TRUE;
}
}

²ÎÊý£º
hMoudle£ºÊǶ¯Ì¬¿â±»µ÷ÓÃʱËù´«µÝÀ´µÄÒ»¸öÖ¸Ïò×Ô¼ºµÄ¾ä±ú(ʵ¼ÊÉÏ£¬ËüÊÇÖ¸Ïò_DGROUP¶ÎµÄÒ»¸öÑ¡Ôñ·û)£»
ul_reason_for_call£ºÊÇÒ»¸ö˵Ã÷¶¯Ì¬¿â±»µ÷Ô­ÒòµÄ±êÖ¾¡£µ±½ø³Ì»òÏß³Ì×°Èë»òÐ¶ÔØ¶¯Ì¬Á¬½Ó¿âµÄʱºò£¬²Ù×÷ϵͳµ÷ÓÃÈë¿Úº¯Êý£¬²¢ËµÃ÷¶¯Ì¬Á¬½Ó¿â±»µ÷ÓõÄÔ­Òò¡£ËüËùÓеĿÉÄÜֵΪ£º
DLL_PROCESS_ATTACH: ½ø³Ì±»µ÷Óã»
DLL_THREAD_ATTACH: Ï̱߳»µ÷Óã»
DLL_PROCESS_DETACH: ½ø³Ì±»Í£Ö¹£»
DLL_THREAD_DETACH: Ï̱߳»Í£Ö¹£»
lpReserved£ºÊÇÒ»¸ö±»ÏµÍ³Ëù±£ÁôµÄ²ÎÊý¡£

2¡¢_DllMainCRTStartup

ΪÁËʹÓá°C¡±ÔËÐпâ(CRT£¬C Run time Library)µÄDLL°æ±¾£¨¶àỊ̈߳©£¬Ò»¸öDLLÓ¦ÓóÌÐò±ØÐëÖ¸¶¨_DllMainCRTStartupΪÈë¿Úº¯Êý£¬DLLµÄ³õʼ»¯º¯Êý±ØÐëÊÇDllMain¡£

_DllMainCRTStartupÍê³ÉÒÔÏÂÈÎÎñ£ºµ±½ø³Ì»òÏß³ÌÀ¦°ó(Attach)µ½DLLʱΪ¡°C¡±ÔËÐÐʱµÄÊý¾Ý(C Runtime Data)·ÖÅä¿Õ¼äºÍ³õʼ»¯²¢ÇÒ¹¹ÔìÈ«¾Ö¡°C++¡±¶ÔÏ󣬵±½ø³Ì»òÕßÏß³ÌÖÕֹʹÓÃDLL(Detach)ʱ£¬ÇåÀíC Runtime Data²¢ÇÒÏú»ÙÈ«¾Ö¡°C++¡±¶ÔÏó¡£Ëü»¹µ÷ÓÃDllMainºÍRawDllMainº¯Êý¡£

RawDllMainÔÚDLLÓ¦ÓóÌÐò¶¯Ì¬Á´½Óµ½MFC DLLʱ±»ÐèÒª£¬µ«ËüÊǾ²Ì¬µÄÁ´½Óµ½DLLÓ¦ÓóÌÐòµÄ¡£ÔÚ½²Êö״̬¹ÜÀíʱ½âÊÍÆäÔ­Òò¡£

ËÄ¡¢¹ØÓÚÔ¼¶¨£º

¶¯Ì¬¿âÊä³öº¯ÊýµÄÔ¼¶¨ÓÐÁ½ÖÖ£ºµ÷ÓÃÔ¼¶¨ºÍÃû×ÖÐÞÊÎÔ¼¶¨¡£

1)µ÷ÓÃÔ¼¶¨(Calling convention)£º¾ö¶¨º¯Êý²ÎÊý´«ËÍʱÈëÕ»ºÍ³öÕ»µÄ˳Ðò£¬Óɵ÷ÓÃÕß»¹ÊDZ»µ÷ÓÃÕ߰ѲÎÊýµ¯³öÕ»£¬ÒÔ¼°±àÒëÆ÷ÓÃÀ´Ê¶±ðº¯ÊýÃû×ÖµÄÐÞÊÎÔ¼¶¨¡£
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
2Â¥2005-12-31 17:15:21
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

º¯Êýµ÷ÓÃÔ¼¶¨ÓжàÖÖ£¬ÕâÀï¼òµ¥ËµÒ»Ï£º

   1¡¢__stdcallµ÷ÓÃÔ¼¶¨Ï൱ÓÚ16λ¶¯Ì¬¿âÖо­³£Ê¹ÓõÄPASCALµ÷ÓÃÔ¼¶¨¡£ÔÚ32λµÄVC++5.0ÖÐPASCALµ÷ÓÃÔ¼¶¨²»ÔÙ±»Ö§³Ö£¨Êµ¼ÊÉÏËüÒѱ»¶¨ÒåΪ__stdcall¡£³ýÁË__pascalÍ⣬__fortranºÍ__syscallÒ²²»±»Ö§³Ö£©£¬È¡¶ø´úÖ®µÄÊÇ__stdcallµ÷ÓÃÔ¼¶¨¡£Á½ÕßʵÖÊÉÏÊÇÒ»Öµģ¬¼´º¯ÊýµÄ²ÎÊý×ÔÓÒÏò×óͨ¹ýÕ»´«µÝ£¬±»µ÷Óõĺ¯ÊýÔÚ·µ»ØÇ°ÇåÀí´«ËͲÎÊýµÄÄÚ´æÕ»£¬µ«²»Í¬µÄÊǺ¯ÊýÃûµÄÐÞÊβ¿·Ö£¨¹ØÓÚº¯ÊýÃûµÄÐÞÊβ¿·ÖÔÚºóÃæ½«Ïêϸ˵Ã÷£©¡£

    _stdcallÊÇPascal³ÌÐòµÄȱʡµ÷Ó÷½Ê½£¬Í¨³£ÓÃÓÚWin32 ApiÖУ¬º¯Êý²ÉÓôÓÓÒµ½×óµÄѹջ·½Ê½£¬×Ô¼ºÔÚÍ˳öʱÇå¿Õ¶ÑÕ»¡£VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏÏ»®Ïßǰ׺£¬ÔÚº¯ÊýÃûºó¼ÓÉÏ"@"ºÍ²ÎÊýµÄ×Ö½ÚÊý¡£

    2¡¢Cµ÷ÓÃÔ¼¶¨£¨¼´ÓÃ__cdecl¹Ø¼ü×Ö˵Ã÷£©°´´ÓÓÒÖÁ×óµÄ˳Ðòѹ²ÎÊýÈëÕ»£¬Óɵ÷ÓÃÕ߰ѲÎÊýµ¯³öÕ»¡£¶ÔÓÚ´«ËͲÎÊýµÄÄÚ´æÕ»ÊÇÓɵ÷ÓÃÕßÀ´Î¬»¤µÄ£¨ÕýÒòΪÈç´Ë£¬ÊµÏֿɱä²ÎÊýµÄº¯ÊýÖ»ÄÜʹÓøõ÷ÓÃÔ¼¶¨£©¡£ÁíÍ⣬ÔÚº¯ÊýÃûÐÞÊÎÔ¼¶¨·½ÃæÒ²ÓÐËù²»Í¬¡£

    _cdeclÊÇCºÍC£«£«³ÌÐòµÄȱʡµ÷Ó÷½Ê½¡£Ã¿Ò»¸öµ÷ÓÃËüµÄº¯Êý¶¼°üº¬Çå¿Õ¶ÑÕ»µÄ´úÂ룬ËùÒÔ²úÉúµÄ¿ÉÖ´ÐÐÎļþ´óС»á±Èµ÷ÓÃ_stdcallº¯ÊýµÄ´ó¡£º¯Êý²ÉÓôÓÓÒµ½×óµÄѹջ·½Ê½¡£VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏÏ»®Ïßǰ׺¡£ÊÇMFCȱʡµ÷ÓÃÔ¼¶¨¡£

    3¡¢__fastcallµ÷ÓÃÔ¼¶¨ÊÇ¡°ÈË¡±ÈçÆäÃû£¬ËüµÄÖ÷ÒªÌØµã¾ÍÊǿ죬ÒòΪËüÊÇͨ¹ý¼Ä´æÆ÷À´´«ËͲÎÊýµÄ£¨Êµ¼ÊÉÏ£¬ËüÓÃECXºÍEDX´«ËÍǰÁ½¸öË«×Ö£¨DWORD£©»ò¸üСµÄ²ÎÊý£¬Ê£ÏµIJÎÊýÈÔ¾É×ÔÓÒÏò×óѹջ´«ËÍ£¬±»µ÷Óõĺ¯ÊýÔÚ·µ»ØÇ°ÇåÀí´«ËͲÎÊýµÄÄÚ´æÕ»£©£¬ÔÚº¯ÊýÃûÐÞÊÎÔ¼¶¨·½Ã棬ËüºÍǰÁ½Õß¾ù²»Í¬¡£

    _fastcall·½Ê½µÄº¯Êý²ÉÓüĴæÆ÷´«µÝ²ÎÊý£¬VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏ"@"ǰ׺£¬ÔÚº¯ÊýÃûºó¼ÓÉÏ"@"ºÍ²ÎÊýµÄ×Ö½ÚÊý¡£     

    4¡¢thiscall½ö½öÓ¦ÓÃÓÚ¡°C++¡±³ÉÔ±º¯Êý¡£thisÖ¸Õë´æ·ÅÓÚCX¼Ä´æÆ÷£¬²ÎÊý´ÓÓÒµ½×óѹ¡£thiscall²»Êǹؼü´Ê£¬Òò´Ë²»Äܱ»³ÌÐòÔ±Ö¸¶¨¡£

    5¡¢naked call²ÉÓÃ1-4µÄµ÷ÓÃÔ¼¶¨Ê±£¬Èç¹û±ØÒªµÄ»°£¬½øÈ뺯Êýʱ±àÒëÆ÷»á²úÉú´úÂëÀ´±£´æESI£¬EDI£¬EBX£¬EBP¼Ä´æÆ÷£¬Í˳öº¯ÊýʱÔò²úÉú´úÂë»Ö¸´ÕâЩ¼Ä´æÆ÷µÄÄÚÈÝ¡£naked call²»²úÉúÕâÑùµÄ´úÂë¡£naked call²»ÊÇÀàÐÍÐÞÊηû£¬¹Ê±ØÐëºÍ_declspec¹²Í¬Ê¹Óá£

    ¹Ø¼ü×Ö __stdcall¡¢__cdeclºÍ__fastcall¿ÉÒÔÖ±½Ó¼ÓÔÚÒªÊä³öµÄº¯Êýǰ£¬Ò²¿ÉÒÔÔÚ±àÒë»·¾³µÄSetting...\C/C++ \Code GenerationÏîÑ¡Ôñ¡£µ±¼ÓÔÚÊä³öº¯ÊýǰµÄ¹Ø¼ü×ÖÓë±àÒë»·¾³ÖеÄÑ¡Ôñ²»Í¬Ê±£¬Ö±½Ó¼ÓÔÚÊä³öº¯ÊýǰµÄ¹Ø¼ü×ÖÓÐЧ¡£ËüÃǶÔÓ¦µÄÃüÁîÐвÎÊý·Ö±ðΪ/Gz¡¢/GdºÍ/Gr¡£È±Ê¡×´Ì¬Îª/Gd£¬¼´__cdecl¡£

    ÒªÍêȫģ·ÂPASCALµ÷ÓÃÔ¼¶¨Ê×ÏȱØÐëʹÓÃ__stdcallµ÷ÓÃÔ¼¶¨£¬ÖÁÓÚº¯ÊýÃûÐÞÊÎÔ¼¶¨£¬¿ÉÒÔͨ¹ýÆäËü·½·¨Ä£·Â¡£»¹ÓÐÒ»¸öÖµµÃÒ»ÌáµÄÊÇWINAPIºê£¬Windows.hÖ§³Ö¸Ãºê£¬Ëü¿ÉÒÔ½«³öº¯Êý·­Òë³ÉÊʵ±µÄµ÷ÓÃÔ¼¶¨£¬ÔÚWIN32ÖУ¬Ëü±»¶¨ÒåΪ__stdcall¡£Ê¹ÓÃWINAPIºê¿ÉÒÔ´´½¨×Ô¼ºµÄAPIs¡£
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
3Â¥2005-12-31 17:15:34
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

2)Ãû×ÖÐÞÊÎÔ¼¶¨

1¡¢ÐÞÊÎÃû(Decoration name)

¡°C¡±»òÕß¡°C++¡±º¯ÊýÔÚÄÚ²¿£¨±àÒëºÍÁ´½Ó£©Í¨¹ýÐÞÊÎÃûʶ±ð¡£ÐÞÊÎÃûÊDZàÒëÆ÷ÔÚ±àÒ뺯Êý¶¨Òå»òÕßÔ­ÐÍʱÉú³ÉµÄ×Ö·û´®¡£ÓÐЩÇé¿öÏÂʹÓú¯ÊýµÄÐÞÊÎÃûÊDZØÒªµÄ£¬ÈçÔÚÄ£¿é¶¨ÒåÎļþÀïÍ·Ö¸¶¨Êä³ö¡°C++¡±ÖØÔغ¯Êý¡¢¹¹Ô캯Êý¡¢Îö¹¹º¯Êý£¬ÓÖÈçÔÚ»ã±à´úÂëÀïµ÷Óá°C¡±¡±»ò¡°C++¡±º¯ÊýµÈ¡£

ÐÞÊÎÃûÓɺ¯ÊýÃû¡¢ÀàÃû¡¢µ÷ÓÃÔ¼¶¨¡¢·µ»ØÀàÐÍ¡¢²ÎÊýµÈ¹²Í¬¾ö¶¨¡£

2¡¢Ãû×ÖÐÞÊÎÔ¼¶¨Ëæµ÷ÓÃÔ¼¶¨ºÍ±àÒëÖÖÀà(C»òC++)µÄ²»Í¬¶ø±ä»¯¡£º¯ÊýÃûÐÞÊÎÔ¼¶¨Ëæ±àÒëÖÖÀàºÍµ÷ÓÃÔ¼¶¨µÄ²»Í¬¶ø²»Í¬£¬ÏÂÃæ·Ö±ð˵Ã÷¡£

    a¡¢C±àÒëʱº¯ÊýÃûÐÞÊÎÔ¼¶¨¹æÔò£º

__stdcallµ÷ÓÃÔ¼¶¨ÔÚÊä³öº¯ÊýÃûǰ¼ÓÉÏÒ»¸öÏ»®Ïßǰ׺£¬ºóÃæ¼ÓÉÏÒ»¸ö¡°@¡±·ûºÅºÍÆä²ÎÊýµÄ×Ö½ÚÊý£¬¸ñʽΪ_functionname@number¡£

__cdeclµ÷ÓÃÔ¼¶¨½öÔÚÊä³öº¯ÊýÃûǰ¼ÓÉÏÒ»¸öÏ»®Ïßǰ׺£¬¸ñʽΪ_functionname¡£
   
__fastcallµ÷ÓÃÔ¼¶¨ÔÚÊä³öº¯ÊýÃûǰ¼ÓÉÏÒ»¸ö¡°@¡±·ûºÅ£¬ºóÃæÒ²ÊÇÒ»¸ö¡°@¡±·ûºÅºÍÆä²ÎÊýµÄ×Ö½ÚÊý£¬¸ñʽΪ@functionname@number¡£

    ËüÃǾù²»¸Ä±äÊä³öº¯ÊýÃûÖеÄ×Ö·û´óСд£¬ÕâºÍPASCALµ÷ÓÃÔ¼¶¨²»Í¬£¬PASCALÔ¼¶¨Êä³öµÄº¯ÊýÃûÎÞÈκÎÐÞÊÎÇÒÈ«²¿´óд¡£

    b¡¢C++±àÒëʱº¯ÊýÃûÐÞÊÎÔ¼¶¨¹æÔò£º

__stdcallµ÷ÓÃÔ¼¶¨£º
          1¡¢ÒÔ¡°?¡±±êʶº¯ÊýÃûµÄ¿ªÊ¼£¬ºó¸úº¯ÊýÃû£»
          2¡¢º¯ÊýÃûºóÃæÒÔ¡°@@YG¡±±êʶ²ÎÊý±íµÄ¿ªÊ¼£¬ºó¸ú²ÎÊý±í£»
          3¡¢²ÎÊý±íÒÔ´úºÅ±íʾ£º
             X--void £¬
             D--char£¬
             E--unsigned char£¬
             F--short£¬
             H--int£¬
             I--unsigned int£¬
             J--long£¬
             K--unsigned long£¬
             M--float£¬
             N--double£¬
             _N--bool£¬
             ....
             PA--±íʾָÕ룬ºóÃæµÄ´úºÅ±íÃ÷Ö¸ÕëÀàÐÍ£¬Èç¹ûÏàͬÀàÐ͵ÄÖ¸ÕëÁ¬Ðø³öÏÖ£¬ÒÔ¡°0¡±´úÌæ£¬Ò»¸ö¡°0¡±´ú±íÒ»´ÎÖØ¸´£»
          4¡¢²ÎÊý±íµÄµÚÒ»ÏîΪ¸Ãº¯ÊýµÄ·µ»ØÖµÀàÐÍ£¬ÆäºóÒÀ´ÎΪ²ÎÊýµÄÊý¾ÝÀàÐÍ,Ö¸Õë±êʶÔÚÆäËùÖ¸Êý¾ÝÀàÐÍǰ£»  
          5¡¢²ÎÊý±íºóÒÔ¡°@Z¡±±êʶÕû¸öÃû×ֵĽáÊø£¬Èç¹û¸Ãº¯ÊýÎÞ²ÎÊý£¬ÔòÒÔ¡°Z¡±±êʶ½áÊø¡£

    Æä¸ñʽΪ¡°?functionname@@YG*****@Z¡±»ò¡°?functionname@@YG*XZ¡±£¬ÀýÈç
          int Test1£¨char *var1,unsigned long£©-----¡°?Test1@@YGHPADK@Z¡±
          void Test2£¨£©                       -----¡°?Test2@@YGXXZ¡±

__cdeclµ÷ÓÃÔ¼¶¨£º
¹æÔòͬÉÏÃæµÄ_stdcallµ÷ÓÃÔ¼¶¨£¬Ö»ÊDzÎÊý±íµÄ¿ªÊ¼±êʶÓÉÉÏÃæµÄ¡°@@YG¡±±äΪ¡°@@YA¡±¡£

__fastcallµ÷ÓÃÔ¼¶¨£º
¹æÔòͬÉÏÃæµÄ_stdcallµ÷ÓÃÔ¼¶¨£¬Ö»ÊDzÎÊý±íµÄ¿ªÊ¼±êʶÓÉÉÏÃæµÄ¡°@@YG¡±±äΪ¡°@@YI¡±¡£

    VC++¶Ôº¯ÊýµÄʡȱÉùÃ÷ÊÇ"__cedcl",½«Ö»Äܱ»C/C++µ÷ÓÃ.
     
Îå¡¢¹ØÓÚDLLµÄº¯Êý£º

    ¶¯Ì¬Á´½Ó¿âÖж¨ÒåÓÐÁ½ÖÖº¯Êý£ºµ¼³öº¯Êý(export function)ºÍÄÚ²¿º¯Êý(internal function)¡£µ¼³öº¯Êý¿ÉÒÔ±»ÆäËüÄ£¿éµ÷Óã¬ÄÚ²¿º¯ÊýÔÚ¶¨ÒåËüÃǵÄDLL³ÌÐòÄÚ²¿Ê¹Óá£

Êä³öº¯ÊýµÄ·½·¨ÓÐÒÔϼ¸ÖÖ£º

1¡¢´«Í³µÄ·½·¨

ÔÚÄ£¿é¶¨ÒåÎļþµÄEXPORT²¿·ÖÖ¸¶¨ÒªÊäÈëµÄº¯Êý»òÕß±äÁ¿¡£Óï·¨¸ñʽÈçÏ£º
entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]

ÆäÖУº

entrynameÊÇÊä³öµÄº¯Êý»òÕßÊý¾Ý±»ÒýÓõÄÃû³Æ£»

internalnameͬentryname;

@ordinal±íʾÔÚÊä³ö±íÖеÄ˳ÐòºÅ(index)£»

NONAME½ö½öÔÚ°´Ë³ÐòºÅÊä³öʱ±»Ê¹Ó㨲»Ê¹ÓÃentryname£©£»

DATA±íʾÊä³öµÄÊÇÊý¾ÝÏʹÓÃDLLÊä³öÊý¾ÝµÄ³ÌÐò±ØÐëÉùÃ÷¸ÃÊý¾ÝÏîΪ_declspec(dllimport)¡£

ÉÏÊö¸÷ÏîÖУ¬Ö»ÓÐentrynameÏîÊDZØÐëµÄ£¬ÆäËû¿ÉÒÔÊ¡ÂÔ¡£

¶ÔÓÚ¡°C¡±º¯ÊýÀ´Ëµ£¬entryname¿ÉÒÔµÈͬÓÚº¯ÊýÃû£»µ«ÊǶԡ°C++¡±º¯Êý£¨³ÉÔ±º¯Êý¡¢·Ç³ÉÔ±º¯Êý£©À´Ëµ£¬entrynameÊÇÐÞÊÎÃû¡£¿ÉÒÔ´Ó.mapÓ³ÏñÎļþÖеõ½ÒªÊä³öº¯ÊýµÄÐÞÊÎÃû£¬»òÕßʹÓÃDUMPBIN /SYMBOLSµÃµ½£¬È»ºó°ÑËüÃÇдÔÚ.defÎļþµÄÊä³öÄ£¿é¡£DUMPBINÊÇVCÌṩµÄÒ»¸ö¹¤¾ß¡£

Èç¹ûÒªÊä³öÒ»¸ö¡°C++¡±À࣬Ôò°ÑÒªÊä³öµÄÊý¾ÝºÍ³ÉÔ±µÄÐÞÊÎÃû¶¼Ð´Èë.defÄ£¿é¶¨ÒåÎļþ¡£

2¡¢ÔÚÃüÁîÐÐÊä³ö

¶ÔÁ´½Ó³ÌÐòLINKÖ¸¶¨/EXPORTÃüÁîÐвÎÊý£¬Êä³öÓйغ¯Êý¡£
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
4Â¥2005-12-31 17:16:01
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

3¡¢Ê¹ÓÃMFCÌṩµÄÐÞÊηûºÅ_declspec(dllexport)

ÔÚÒªÊä³öµÄº¯Êý¡¢Àà¡¢Êý¾ÝµÄÉùÃ÷ǰ¼ÓÉÏ_declspec(dllexport)µÄÐÞÊηû£¬±íʾÊä³ö¡£__declspec(dllexport)ÔÚCµ÷ÓÃÔ¼¶¨¡¢C±àÒëÇé¿öÏ¿ÉÒÔÈ¥µôÊä³öº¯ÊýÃûµÄÏ»®Ïßǰ׺¡£extern "C"ʹµÃÔÚC++ÖÐʹÓÃC±àÒ뷽ʽ³ÉΪ¿ÉÄÜ¡£ÔÚ¡°C++¡±Ï¶¨Òå¡°C¡±º¯Êý£¬ÐèÒª¼Óextern ¡°C¡±¹Ø¼ü´Ê¡£ÓÃextern "C"À´Ö¸Ã÷¸Ãº¯ÊýʹÓÃC±àÒ뷽ʽ¡£Êä³öµÄ¡°C¡±º¯Êý¿ÉÒÔ´Ó¡°C¡±´úÂëÀïµ÷Óá£
     
    ÀýÈ磬ÔÚÒ»¸öC++ÎļþÖУ¬ÓÐÈçϺ¯Êý£º
    extern "C" {void  __declspec(dllexport) __cdecl Test(int var);}
ÆäÊä³öº¯ÊýÃûΪ£ºTest  
  
MFCÌṩÁËһЩºê£¬¾ÍÓÐÕâÑùµÄ×÷Óá£

AFX_CLASS_IMPORT£º__declspec(dllexport)
  
AFX_API_IMPORT£º__declspec(dllexport)
  
AFX_DATA_IMPORT£º__declspec(dllexport)
  
AFX_CLASS_EXPORT£º__declspec(dllexport)
  
AFX_API_EXPORT£º__declspec(dllexport)
  
AFX_DATA_EXPORT£º__declspec(dllexport)
  
AFX_EXT_CLASS£º #ifdef _AFXEXT  
    AFX_CLASS_EXPORT
    #else
    AFX_CLASS_IMPORT
  
AFX_EXT_API£º#ifdef _AFXEXT
    AFX_API_EXPORT
    #else
    AFX_API_IMPORT
  
AFX_EXT_DATA£º#ifdef _AFXEXT
     AFX_DATA_EXPORT
     #else
     AFX_DATA_IMPORT

ÏñAFX_EXT_CLASSÕâÑùµÄºê£¬Èç¹ûÓÃÓÚDLLÓ¦ÓóÌÐòµÄʵÏÖÖУ¬Ôò±íʾÊä³ö£¨ÒòΪ_AFX_EXT±»¶¨Ò壬ͨ³£ÊÇÔÚ±àÒëÆ÷µÄ±êʶ²ÎÊýÖÐÖ¸¶¨¸ÃÑ¡Ïî/D_AFX_EXT£©£»Èç¹ûÓÃÓÚʹÓÃDLLµÄÓ¦ÓóÌÐòÖУ¬Ôò±íʾÊäÈ루_AFX_EXTûÓж¨Ò壩¡£

ÒªÊä³öÕû¸öµÄÀ࣬¶ÔÀàʹÓÃ_declspec(_dllexpot)£»ÒªÊä³öÀàµÄ³ÉÔ±º¯Êý£¬Ôò¶Ô¸Ãº¯ÊýʹÓÃ_declspec(_dllexport)¡£È磺

class AFX_EXT_CLASS CTextDoc : public CDocument
{
¡­
}

extern "C" AFX_EXT_API void WINAPI InitMYDLL();

Õ⼸ÖÖ·½·¨ÖУ¬×îºÃ²ÉÓõÚÈýÖÖ£¬·½±ãºÃÓã»Æä´ÎÊǵÚÒ»ÖÖ£¬Èç¹û°´Ë³ÐòºÅÊä³ö£¬µ÷ÓÃЧÂÊ»á¸ßЩ£»×î´ÎÊǵڶþÖÖ¡£  

Áù¡¢Ä£¿é¶¨ÒåÎļþ(.DEF)

Ä£¿é¶¨ÒåÎļþ(.DEF)ÊÇÒ»¸ö»ò¶à¸öÓÃÓÚÃèÊöDLLÊôÐÔµÄÄ£¿éÓï¾ä×é³ÉµÄÎı¾Îļþ£¬Ã¿¸öDEFÎļþÖÁÉÙ±ØÐë°üº¬ÒÔÏÂÄ£¿é¶¨ÒåÓï¾ä£º

* µÚÒ»¸öÓï¾ä±ØÐëÊÇLIBRARYÓï¾ä£¬Ö¸³öDLLµÄÃû×Ö£»
* EXPORTSÓï¾äÁгö±»µ¼³öº¯ÊýµÄÃû×Ö£»½«ÒªÊä³öµÄº¯ÊýÐÞÊÎÃûÂÞÁÐÔÚEXPORTS֮ϣ¬Õâ¸öÃû×Ö±ØÐëÓ붨Ò庯ÊýµÄÃû×ÖÍêȫһÖ£¬Èç´Ë¾ÍµÃµ½Ò»¸öûÓÐÈκÎÐÞÊεĺ¯ÊýÃûÁË¡£
* ¿ÉÒÔʹÓÃDESCRIPTIONÓï¾äÃèÊöDLLµÄÓÃ;(´Ë¾ä¿ÉÑ¡)£»
* ";"¶ÔÒ»ÐнøÐÐ×¢ÊÍ(¿ÉÑ¡)¡£

Æß¡¢DLL³ÌÐòºÍµ÷ÓÃÆäÊä³öº¯ÊýµÄ³ÌÐòµÄ¹ØÏµ

1¡¢dllÓë½ø³Ì¡¢Ïß³ÌÖ®¼äµÄ¹ØÏµ

DLLÄ£¿é±»Ó³Éäµ½µ÷ÓÃËüµÄ½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä¡£
DLLʹÓõÄÄÚ´æ´Óµ÷Óýø³ÌµÄÐéÄâµØÖ·¿Õ¼ä·ÖÅ䣬ֻÄܱ»¸Ã½ø³ÌµÄÏß³ÌËù·ÃÎÊ¡£
DLLµÄ¾ä±ú¿ÉÒÔ±»µ÷Óýø³ÌʹÓ㻵÷Óýø³ÌµÄ¾ä±ú¿ÉÒÔ±»DLLʹÓá£
DLLʹÓõ÷Óýø³ÌµÄÕ»¡£

2¡¢¹ØÓÚ¹²ÏíÊý¾Ý¶Î

DLL¶¨ÒåµÄÈ«¾Ö±äÁ¿¿ÉÒÔ±»µ÷Óýø³Ì·ÃÎÊ£»DLL¿ÉÒÔ·ÃÎʵ÷Óýø³ÌµÄÈ«¾ÖÊý¾Ý¡£Ê¹ÓÃͬһDLLµÄÿһ¸ö½ø³Ì¶¼ÓÐ×Ô¼ºµÄDLLÈ«¾Ö±äÁ¿ÊµÀý¡£Èç¹û¶à¸öÏ̲߳¢·¢·ÃÎÊͬһ±äÁ¿£¬ÔòÐèҪʹÓÃͬ²½»úÖÆ£»¶ÔÒ»¸öDLLµÄ±äÁ¿£¬Èç¹ûÏ£Íûÿ¸öʹÓÃDLLµÄÏ̶߳¼ÓÐ×Ô¼ºµÄÖµ£¬ÔòÓ¦¸ÃʹÓÃÏֲ߳̾¿´æ´¢(TLS£¬Thread Local Strorage)¡£

    ÔÚ³ÌÐòÀï¼ÓÈëÔ¤±àÒëÖ¸Á»òÔÚ¿ª·¢»·¾³µÄÏîÄ¿ÉèÖÃÀïÒ²¿ÉÒÔ´ïµ½ÉèÖÃÊý¾Ý¶ÎÊôÐÔµÄÄ¿µÄ.±ØÐë¸øÕâЩ±äÁ¿¸³³õÖµ,·ñÔò±àÒëÆ÷»á°ÑûÓи³³õʼֵµÄ±äÁ¿·ÅÔÚÒ»¸ö½Ðδ±»³õʼ»¯µÄÊý¾Ý¶ÎÖС£
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
5Â¥2005-12-31 17:16:20
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

houcy

гæ (³õÈëÎÄ̳)

1

Â¥Ö÷Ç¿£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡
ÇëÎÊÂ¥Ö÷¿´µÄÄı¾Ê飿£¿£¿ÎÒ×î½ü¿´µÄ¡¶ÉîÈëdz³öMFC¡·£¬
6Â¥2005-12-31 18:48:46
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

ÍøÉϵÄÊ飬ºÇºÇ£¬Ëæ±ãä¯ÀÀÁË
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
7Â¥2005-12-31 19:03:25
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

³ÌÒ§½ð

0.5

ºÃ¶«Î÷
8Â¥2006-02-07 17:33:18
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

lnx311

Í­³æ (³õÈëÎÄ̳)

0.5

ºÃÌù£¬UP
http://www.tongsan.meibu.com
9Â¥2006-02-07 23:09:23
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zkhello

10Â¥2006-02-21 23:42:16
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ zsglly µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á£¬Çóµ¼Ê¦ÊÕ +6 ÌìÌìºÃÔËÀ´Éϰ¶° 2026-03-24 6/300 2026-03-24 17:19 by dick_runner
[¿¼ÑÐ] ÊÕ08µ÷¼ÁÉú +4 komorebi69 2026-03-18 4/200 2026-03-24 16:53 by ²»ÖªÃûСѧÉú
[¿¼ÑÐ] 081700 µ÷¼Á 267·Ö +9 ÃÔÈ˵Ĺþ¹þ 2026-03-23 9/450 2026-03-24 11:58 by 544594351
[»ù½ðÉêÇë] Çë½ÌÏ´ó¼Ò 2026Äê¹ú¼Ò»ù½ðÉêÇëÊÇ˫äÉóÂ𣿠+3 lishucheng1 2026-03-22 5/250 2026-03-24 08:22 by gltch
[¿¼ÑÐ] 335Çóµ÷¼Á +4 yuyuÓî 2026-03-23 5/250 2026-03-23 23:49 by Txy@872106
[¿¼ÑÐ] 335·Ö | ²ÄÁÏÓ뻯¹¤×¨Ë¶ | GPA 4.07 | ÓпÆÑо­Àú +4 cccchenso 2026-03-23 4/200 2026-03-23 23:00 by Ðìckkk
[¿¼ÑÐ] 361Çóµ÷¼Á +3 Glack 2026-03-22 3/150 2026-03-23 22:03 by fuyu_
[¿¼ÑÐ] »¯Ñ§308·ÖÇóµ÷¼Á +3 ÄãºÃÃ÷ÌìÄãºÃ 2026-03-23 3/150 2026-03-23 20:11 by macy2011
[¿¼ÑÐ] Ò»Ö¾Ô¸ÉϺ£½»´óÉúÎïÓëҽҩר˶324·Ö£¬Çóµ÷¼Á +5 jiajunX 2026-03-22 5/250 2026-03-23 18:07 by YMUÊ©ÀÏʦ
[¿¼ÑÐ] Çóµ÷¼ÁÒ»Ö¾Ô¸º£´ó£¬0703»¯Ñ§Ñ§Ë¶304·Ö£¬Óдó´´ÏîÄ¿£¬Ëļ¶Òѹý +6 ÐÒÔËÁ¨Á¨ 2026-03-22 10/500 2026-03-22 20:10 by edmund7
[¿¼ÑÐ] 303Çóµ÷¼Á +5 °²ÒäÁé 2026-03-22 6/300 2026-03-22 12:46 by ËØÑÕÇã³Ç1988
[¿¼ÑÐ] ²ÄÁϹ¤³Ìר˶ 348·ÖÇóµ÷¼Á +3 ¶¬´Ç. 2026-03-17 5/250 2026-03-21 18:47 by ѧԱ8dgXkO
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖØÇì´óѧ085700×ÊÔ´Óë»·¾³×Ü·Ö308Çóµ÷¼Á +7 īīĮ 2026-03-20 7/350 2026-03-21 16:36 by barlinike
[¿¼ÑÐ] 279Çóµ÷¼Á +5 ºìÒÂÒþ¹Ù 2026-03-21 5/250 2026-03-21 14:59 by lature00
[¿¼ÑÐ] 304Çóµ÷¼Á +7 ˾¿Õ. 2026-03-18 7/350 2026-03-20 23:08 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸ Î÷±±´óѧ £¬070300»¯Ñ§Ñ§Ë¶£¬×Ü·Ö287£¬Ë«·ÇÒ»±¾£¬Çóµ÷¼Á¡£ +4 ³¿»èÏßÓëÐǺ£ 2026-03-19 4/200 2026-03-20 22:15 by JourneyLucky
[¿¼ÑÐ] 329Çóµ÷¼Á +9 ÏëÉÏѧ߹߹ 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[¿¼ÑÐ] ²ÄÁÏѧÇóµ÷¼Á +4 Stella_Yao 2026-03-20 4/200 2026-03-20 20:28 by ms629
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ªÁÖ´óѧ²ÄÁÏѧ˶321Çóµ÷¼Á +11 Ymlll 2026-03-18 15/750 2026-03-20 19:40 by ¶¡¶¡*
[¿¼ÑÐ] ²ÄÁÏ¿¼Ñе÷¼Á +3 xwt¡£ 2026-03-19 3/150 2026-03-19 11:22 by wãåÑôw
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û