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++µÄÖ¸Õ룬·¢ÏÖÁËһЩƽʱûעÒâµ½µÄÖ¸ÕëÓ÷¨ºÍÎÊÌâ¡£
1¡¢Ö¸ÕëÒýÓÃ
void func1£¨MYCLASS* &pBuildingElement£©£»
Õ§Ò»¿´£¬¹Ö¹ÖµÄ£¬¿´ÁËϽâÊÍ£¬Ï¸ÏëһϺÍÖ¸ÕëµÄÖ¸ÕëÀàËÆ£º
void func1£¨MYCLASS** pBuildingElement£©£»
¿´ÏÂÃæµÄÀý×Ó£º
...
MyClass* p = new MyClass;
func1(p);
......
ÓÃC++µ÷ÓÃCµÄ¿âº¯Êý
C++µ÷ÓÃCµÄ¿âº¯Êýʱ£¬Èç¹ûÍ·Îļþ¶¨ÒåµÃ²»Ç¡µ±£¬¿ÉÄÜ»á³öÏÖÃ÷Ã÷ijº¯ÊýÔÚobjÎļþÖдæÔÚ£¬µ«ÊÇÈ´·¢ÉúÁ´½Óʧ°ÜµÄÇé¿ö£¬³öÏÖÈçÏ´íÎó:
undefined reference to 'xxx'
³öÏÖÎÊÌâµÄÔÒòÊÇc¿âº¯Êý±àÒë³ÉobjÎļþʱ¶Ôº¯Êý·ûºÅµÄ´¦ÀíºÍC++²»Í¬¡£ÒòΪC++º¯ÊýÖ§³ÖÖØÔØ£¬Ë ......
¼ÙÉèÔÚtest.hÖж¨ÒåÁËÒ»¸östatic bool g_test=false;
Èôtest1.cºÍtest2.c¶¼°üº¬test.h£¬Ôòtest1.cºÍtest2.c·Ö±ðÉú³ÉÁ½·Ýg_test£¬ÔÚtest1.c ÖÐÖÃg_test=true,¶øtest2.cÖÐÈÔȻΪfalse²¢Î´¸Ä±ä£¡shit£¡£¡
Ò»¡¢c³ÌÐò´æ´¢¿Õ¼ä²¼¾Ö
C³ÌÐòÒ»Ö±ÓÉÏÂÁв¿·Ö×é³É£º
1£©ÕýÎĶΗ—CPUÖ´ÐÐ ......
ADO(ActiveX Data
Object)ÊÇMicrosoftÊý¾Ý¿âÓ¦ÓóÌÐò¿ª·¢µÄнӿڣ¬Êǽ¨Á¢ÔÚOLE DBÖ®Éϵĸ߲ãÊý¾Ý¿â·ÃÎʼ¼Êõ£¬¼´Ê¹Äã¶ÔOLE
DB£¬COM²»Á˽âÒ²ÄÜÇáËɶԸ¶ADO,ÒòΪËü·Ç³£¼òµ¥Ò×Óã¬ÉõÖÁ±ÈÄãÒÔÍùËù½Ó´¥µÄODBC API¡¢DAO¡¢RDO¶¼ÒªÈÝÒ×ʹÓ㬲¢²»Ê§Áé»îÐÔ¡£
¡¡¡¡ADO(ActiveX Data Object)ÊÇMicrosoftÊý¾Ý¿âÓ¦ÓÃ
³ÌÐò
......