±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 È£Ãâ ±ÔÄ¢ (Calling Canvention)
Ÿ¶ôõ»ç
(¼Õ´Ô)
2002-11-25 ¿ÀÈÄ 1:27:03
Ä«Å×°í¸®: ÆÁ
4994ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
¾È³çÇϼ¼¿©. Ÿ¶ôÀÓ´Ù..

ÁÖ·Î DLL À» ¾µ¶§(ȣȯ ¹®Á¦¿¡) ÇÊ¿äÇÑ »çÇ× µé ÀÔ´Ï´Ù. ¶ÇÇÑ C++ Builder ¿Í Delphi ·Î ÇÔ²² °³¹ß ÇÒ ¶§ ȣȯ¼º ¹®Á¦·Î ½Å°æ½á¾ß ÇÒ¶§ ÇÊ¿äÇÑ »çÇ× ÀÔ´Ï´Ù.

*** È£Ãâ ±ÔÄ¢(Calling Canvention)

ÀϹÝÀûÀ¸·Î safecall ·Î ´ëºÎºÐ ó¸® µË´Ï´Ù. ¸ÕÀú safecall ¼³¸í ºÎÅÍ..

COMÀ̳ª ¿¹¿Ü 󸮿¡ °ü·ÃµÈ DLLÀÇ ·çƾÀº safecall Áö½ÃÀÚ¸¦ »ç¿ëÇØ¾ß ÇÔ´Ù. COM À̳ª DLL ÇÔ¼ö È£Ãâ¿¡¼­ Áß¿äÇÑ °Ç ÇÔ¼ö¿¡¼­ ¹ß»ýÇÑ ¿¹¿Ü¸¦ µ¨ÆÄÀÌ¿¡¼­ ¹Þ¾Æ¾ß Çϸç, µ¨ÆÄÀÌ¿¡¼­ ¹ß»ýÇÑ ¿¹¿Ü¸¦ COM À̳ª DLL ÇÔ¼ö·Î ³Ñ°Ü ÁÖ´Â °Í ÀÔ´Ï´Ù.

Safecall Áö½ÃÀÚ·Î ·çƾÀ» ¼±¾ðÇÏ¸é ¿¹¿Ü¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º¿¡ Àü´ÞÇÒ ¼ö ÀÖ½¿´Ï´Ù. Safecall Áö½ÃÀÚ´Â µ¨ÆÄÀÌ ¿¹¿Ü¸¦ HResult ¸®ÅÏ°ªÀ¸·Î º¯È¯Çϸç, ¹¬½ÃÀûÀ¸·Î StdCall È£Ãâ ±Ô¾àÀ» ÁöÁ¤ÇÔ´Ù. Áï safecall Àº stdcall ¿¡ HResult 󸮰¡ Ãß°¡µÈ °ÍÀ̶ó°í ÇÒ¼ö ÀÖ°Ú½À´Ï´Ù.

¿¹¸¦ µé¾î, ´ÙÀ½°ú °°Àº ÇÔ¼ö ¼±¾ðÀ» º¸Á®.
fuction Foo(i: Integer): string; Safecall;

ÄÄÆÄÀÏ·¯´Â À§ÀÇ ¼±¾ðÀ» ´ÙÀ½°ú °°Àº ÇüÅ·ΠÀÌÇØÇÔ´Ù.
fuction Foo(i: Integer): string; HResult; StdCall;

±×¸®°í ÄÄÆÄÀÏ·¯´Â ¹¬½ÃÀûÀ¸·Î ÇÔ¼ö Àüü¸¦ try..except ºí·ÏÀ¸·Î °¨½Î¼­ ¿¹¿Ü¸¦ Àâ¾Æ³¿´Ù. ¶ÇÇÑ, except ºí·Ï ¾È¿¡ SafecallExceptionHandler()¸¦ È£ÃâÇؼ­ ¿¹¿Ü¸¦ HResult°ªÀ¸·Î º¯È¯ÇÏ´Â Äڵ带 Áý¾î³Ö½¿´Ù. 16ºñÆ® ½ÃÀý, °³¹ßÀÚ°¡ Á÷Á¢ ¿¹¿Ü¸¦ Àâ¾Æ³»°í ¿¡·¯ ¹øÈ£¸¦ µ¹·ÁÁÖ´ø °ÍÀ» ÄÄÆÄÀÏ·¯°¡ ´ë½Å ÇØÁÖ´Â ¼ÀÀÌÁ®.


´ÙÀ½À¸·Î ±Û ¾²´Â ±è¿¡ È£Ãâ¿¡ ´ëÇÑ Á»´õ ¼³¸íÀ» ÇÏÁÒ.

C, Pascal, Register È£Ãâ ±ÔÄ¢Àº °¢±â ½ºÅà Ŭ¸°¾÷, ÆĶó¹ÌÅÍ ¼ø¼­, ´ë¼Ò ¹®ÀÚ, Àü¿¬ ¸íĪÀÇ À§Ä¡ µîÀÌ °¢±â ´Ù¸¨´Ï´Ù. ÆĶó¹ÌÅ͵éÀº È£Ãâ ±ÔÄ¢¿¡ µû¶ó CPU Register And/Or Stack À» ÅëÇØ ÇÁ·Î½ÃÀú¿Í ÇÔ¼ö¿¡ Àü´ÞµÇ´Â ¹æ½ÄÀÌ ´Þ¶óÁü´Ù.

ÆĶó¹ÌÅÍ È£Ãâ¼ø¼­ Clean-up Register Name º¯°æ »çÇ×
register Left-to-right ÇÔ¼ö Yes
pascal Left-to-right ÇÔ¼ö No ´ë¹®ÀÚ
cdecl Right-to-left Caller No '_' °¡ ¾Õ¿¡ ºÙÀ½
stdcall Right-to-left ÇÔ¼ö No º¯°æ¾ø½¿
safecall Right-to-left ÇÔ¼ö No º¯°æ¾ø½¿

C, C++, Pascal, Assembly ´Â °¢±â ´Ù¸¥ È£Ãâ ¹æ½ÄÀ» °¡Áý´Ï´Ù.
C++ Àº name-mangling À» ÃëÇÔ´Ù. Assembly ´Â ½ºÅØ¿¡ Push ÇÏ°í Pop Çؼ­ ¾ò´Â ´Ü¼øÇÑ ¹æ¹ýÀ» »ç¿ëÇÔ´Ù. Pascal Àº Top-down ¹æ½ÄÀ¸·Î ÀÎÀÚ¸¦ Á¤ÇÔ´Ù. ¹Ý¸é¿¡ C ´Â Pascal °ú´Â ¹Ý´ë·Î ½ºÅà À§¿¡ ÀúÀåÇÔ´Ù.

º¼·£µå °³¹ßÀÚ µéÀº ÃÖÀûÈ­ Äڵ带 »ý¼ºÇÏ·Á¸é ½ºÅÿ¡ ÀÎÀÚ¸¦ ÀúÀåÇÏ´Â ¹æ½Äº¸´Ù´Â ·¹Áö½ºÅ͸¦ °æÀ¯ÇÏ´Â ¹æ½ÄÀÌ ÈξÀ ºü¸£´Ù´Â °ÍÀ» ¹ß°ßÇß´ã¹Ì´Ù. ±×·¡¼­ ³ª¿Â °ÍÀÌ pascal ÀÓ´Ù. ±×·¯³ª C++ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇÑ name-mangling ¹®Á¦¿Í ºÎµ÷ÃƽÀ´Ï´Ù. ÀϹÝÀûÀ¸·Î C ÄÚµåÀÇ cdecl °ú ÇÔ²² ²¿¿©Áø name À» ±¸º°ÇÏÁö ¸øÇÔ´Ù. À̶§´Â stdcall À» »ç¿ëÇØ¾ß ÇÔ´Ù.

ÀÌ·± ¹®Á¦µéÀº COM À̳ª DLL ÀÇ ÇÔ¼ö¸¦ ¸¸µé¶§ ¾î¶»°Ô È£ÃâÇß´À³Ä¿¡ °ü·ÃÀÌ ÀÖ½À´Ï´Ù.