C/C++º¯Êýµ÷ÓÃÔ¼¶¨
¹ØÓÚ C/C++ º¯Êýµ÷ÓÃÔ¼¶¨£¬´ó¶àÊýʱºò²¢²»»áÓ°Ïì³ÌÐòÂß¼£¬µ«Óöµ½¿çÓïÑÔ±à³Ìʱ£¬Á˽âһϻ¹ÊÇÓкô¦µÄ¡£
VC ÖÐĬÈϵ÷ÓÃÊÇ __cdecl ·½Ê½£¬Windows API ʹÓà __stdcall µ÷Ó÷½Ê½£¬ÔÚ DLL µ¼³öº¯ÊýÖУ¬ÎªÁ˸ú Windows API ±£³ÖÒ»Ö£¬½¨ÒéʹÓà __stdcall ·½Ê½¡£
µ÷ÓÃÔ¼¶¨¸ú¶ÑÕ»Çå³ýÃÜÇÐÏà¹Ø¡£Èç¹ûдһ¸ö»ã±àº¯Êý£¬¸ø C/C++ µ÷Óã¬ÔÚ __cdecl ·½Ê½Ï£¬Ôò»ã±àº¯ÊýÎÞÐèÇå³ý¶ÑÕ»£¬ÔÚ __stdcall ·½Ê½Ï£¬»ã±àº¯ÊýÐèÒªÔÚ·µ»Ø£¨RET£©Ö®Ç°»Ö¸´¶ÑÕ»¡£
C ÓïÑÔÓÐ __cdecl¡¢__stdcall¡¢__fastcall¡¢naked¡¢__pascal¡£
C++ ÓïÑÔÓÐ __cdecl¡¢__stdcall¡¢__fastcall¡¢naked¡¢__pascal¡¢__thiscall£¬±È C ÓïÑÔ¶à³öÒ»ÖÖ __thiscall µ÷Ó÷½Ê½¡£
ÔÚVCÖУ¬¿ÉÒÔÉèÖÃĬÈϵĵ÷ÓÃÔ¼¶¨£¬ÉèÖ÷¾¶Îª£º
Project à Properties à Configuration Properties à C/C++ à Advanced à Call Conversion¡£
ÏÂÃæÏêϸ½éÉÜÈçÉÏÁùÖÖµ÷Ó÷½Ê½£º
1¡¢__cdecl
__cdeclµ÷ÓÃÔ¼¶¨ÓÖ³ÆÎª C µ÷ÓÃÔ¼¶¨£¬ÊÇ C/C++ ÓïÑÔȱʡµÄµ÷ÓÃÔ¼¶¨¡£²ÎÊý°´ÕÕ´ÓÓÒÖÁ×óµÄ·½Ê½ÈëÕ»£¬º¯Êý±¾Éí²»ÇåÀíÕ»£¬´Ë¹¤×÷Óɵ÷ÓÃÕ߸ºÔ𣬷µ»ØÖµÔÚEAXÖС£ÓÉÓÚÓɵ÷ÓÃÕßÇåÀíÕ»£¬ËùÒÔÔÊÐí¿É±ä²ÎÊýº¯Êý´æÔÚ£¬Èçint sprintf(char* buffer,const char* format,...);¡£
2¡¢__stdcall
__stdcall ºÜ¶àʱºò±»³ÆÎª pascal µ÷ÓÃÔ¼¶¨¡£pascal ÓïÑÔÊÇÔçÆÚºÜ³£¼ûµÄÒ»ÖÖ½ÌѧÓüÆËã»ú³ÌÐòÉè¼ÆÓïÑÔ£¬ÆäÓï·¨ÑϽ÷¡£²ÎÊý°´ÕÕ´ÓÓÒÖÁ×óµÄ·½Ê½ÈëÕ»£¬º¯Êý×ÔÉíÇåÀí¶ÑÕ»£¬·µ»ØÖµÔÚEAXÖС£
3¡¢__fastcall
¹ËÃû˼Ò壬__fastcall µÄÌØµã¾ÍÊǿ죬ÒòΪËüͨ¹ý CPU ¼Ä´æÆ÷À´´«µÝ²ÎÊý¡£ËûÓà ECX ºÍ EDX ´«ËÍǰÁ½¸öË«×Ö£¨DWORD£©»ò¸üСµÄ²ÎÊý£¬Ê£ÏµIJÎÊý°´ÕÕ´ÓÓÒÖÁ×óµÄ·½Ê½ÈëÕ»£¬º¯Êý×ÔÉíÇåÀí¶ÑÕ»£¬·µ»ØÖµÔÚ EAX ÖС£
4¡¢naked
naked ÊÇÒ»¸öºÜÉÙ¼ûµÄµ÷ÓÃÔ¼¶¨£¬Ò»°ã²»½¨ÒéʹÓᣱàÒëÆ÷²»»á¸øÕâÖÖº¯ÊýÔö¼Ó³õʼ»¯ºÍÇåÀí´úÂ룬¸üÌØÊâµÄÊÇ£¬Äã²»ÄÜÓÃreturn·µ»Ø·µ»ØÖµ£¬Ö»ÄÜÓòåÈë»ã±à·µ»Ø½á¹û£¬´Ëµ÷ÓÃÔ¼¶¨±ØÐë¸ú __declspec ͬʱʹÓá£ÀýÈ綨ÒåÒ»¸öÇóºÍ³ÌÐò£¬Èç__declspec(naked) int add(int a,int b);¡£
5¡¢__pascal
ÕâÊÇ pascal ÓïÑԵĵ÷ÓÃÔ¼¶¨£¬¸ú __stdcall Ò»Ñù£¬²ÎÊý°´ÕÕ´ÓÓÒÖÁ×óµÄ·½Ê½ÈëÕ»£¬º¯Êý×ÔÉíÇåÀí¶ÑÕ»£¬·µ»ØÖµÔÚEAXÖС£VC ÖÐÒѾ·ÏÆúÁËÕâÖÖµ÷Ó÷½Ê½£¬Òò´ËÔÚд VC ³ÌÐòʱ£¬½¨ÒéʹÓà __stdcall ´úÌæ¡£
6¡¢__thiscall
ÕâÊÇ C++ ÓïÑÔÌØÓеÄÒ»ÖÖµ÷Ó÷½Ê½£¬ÓÃÓÚÀà³ÉÔ±º¯ÊýµÄµ÷ÓÃÔ¼¶¨¡£Èç¹û
Ïà¹ØÎĵµ£º
ÓÃC++µ÷ÓÃCµÄ¿âº¯Êý
C++µ÷ÓÃCµÄ¿âº¯Êýʱ£¬Èç¹ûÍ·Îļþ¶¨ÒåµÃ²»Ç¡µ±£¬¿ÉÄÜ»á³öÏÖÃ÷Ã÷ijº¯ÊýÔÚobjÎļþÖдæÔÚ£¬µ«ÊÇÈ´·¢ÉúÁ´½Óʧ°ÜµÄÇé¿ö£¬³öÏÖÈçÏ´íÎó:
undefined reference to 'xxx'
³öÏÖÎÊÌâµÄÔÒòÊÇc¿âº¯Êý±àÒë³ÉobjÎļþʱ¶Ôº¯Êý·ûºÅµÄ´¦ÀíºÍC++²»Í¬¡£ÒòΪC++º¯ÊýÖ§³ÖÖØÔØ£¬Ë ......
1.¸ÅÊö
¡¡¡¡Ðí¶à³õѧÕß¶ÔC/C++ÓïÑÔÖеÄvoid¼°voidÖ¸ÕëÀàÐͲ»ÉõÀí½â£¬Òò´ËÔÚʹÓÃÉϳöÏÖÁËһЩ´íÎó¡£±¾ÎĽ«¶Ôvoid¹Ø¼ü×ÖµÄÉî¿Ìº¬Òå½øÐнâ˵£¬²¢ÏêÊövoid¼°voidÖ¸ÕëÀàÐ͵ÄʹÓ÷½·¨Óë¼¼ÇÉ¡£
2.voidµÄº¬Òå
¡¡¡¡voidµÄ×ÖÃæÒâ˼ÊÇ“ÎÞÀàÐÍ”£¬void *ÔòΪ“ÎÞÀàÐÍÖ¸Õ딣¬void *¿ÉÒÔÖ¸ÏòÈκÎÀàÐ͵ÄÊý¾Ý¡£
¡ ......
ADO(ActiveX Data
Object)ÊÇMicrosoftÊý¾Ý¿âÓ¦ÓóÌÐò¿ª·¢µÄнӿڣ¬Êǽ¨Á¢ÔÚOLE DBÖ®Éϵĸ߲ãÊý¾Ý¿â·ÃÎʼ¼Êõ£¬¼´Ê¹Äã¶ÔOLE
DB£¬COM²»Á˽âÒ²ÄÜÇáËɶԸ¶ADO,ÒòΪËü·Ç³£¼òµ¥Ò×Óã¬ÉõÖÁ±ÈÄãÒÔÍùËù½Ó´¥µÄODBC API¡¢DAO¡¢RDO¶¼ÒªÈÝÒ×ʹÓ㬲¢²»Ê§Áé»îÐÔ¡£
¡¡¡¡ADO(ActiveX Data Object)ÊÇMicrosoftÊý¾Ý¿âÓ¦ÓÃ
³ÌÐò
......
externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×ÖËü¸æËß±àÒëÆ÷£¬ÆäÉùÃ÷µÄº¯ÊýºÍ±äÁ¿¿ÉÒÔÔÚ±¾Ä£¿é»òÆäËüÄ£¿éÖÐʹÓá£
1¡£¶ÔÓÚextern±äÁ¿À´Ëµ£¬½ö½öÊÇÒ»¸ö±äÁ¿µÄÉùÃ÷£¬Æä²¢²»ÊÇÔÚ¶¨Òå·ÖÅäÄÚ´æ¿Õ¼ä¡£Èç¹û¸Ã±äÁ¿¶¨Òå¶à´Î£¬»áÓÐÁ¬½Ó´íÎó
2¡£Í¨³££¬ÔÚÄ£¿éµÄÍ·ÎļþÖжԱ¾Ä£¿éÌṩ¸øÆäËüÄ£¿éÒýÓõĺ¯ÊýºÍÈ«¾Ö±äÁ ......
±àÕß°´
:·Ç³£»ù±¾¹ØÓÚCÓïÑÔµÄÎÊÌâ,Ò»¸öÐÅÏ¢Àà(¼ÆËã»ú,×ÊѶ¹¤³Ì,µç×Ó¹¤³Ì, ͨÐŹ¤³Ì)רҵµÄ±¾¿Æ±ÏÒµÉúÓ¦¸Ã´ïµ½µÄˮƽ¡£ÌâÄ¿²»ÄÑ,È«²¿¶¼ÄÜ¿ìËٵشðÍ꣬µ±È»Ò²ÐèÒªÒ»¶¨µÄ֪ʶ´¢±¸¡£
¶ÔÓÚ´ó¶àÊýÈË£¬ÎÒÃÇÔ¤ÆÚÄã¿ÉÄÜ´ð´í 3) 4) 15)Ì⣬ËùÒÔ´ð´í3µÀÒÔÄڵģ¬ÎÒÃÇÈÏΪÄãºÜ°ô
´ð´í5µÀÌâÒÔÄÚ£¬ÎÒÃÇÈÏΪÄ㻹²»´í(Ä ......