¾È³çÇϼ¼¿©. Ÿ¶ôÀÓ´Ù..
ÁÖ·Î 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 ÀÇ ÇÔ¼ö¸¦ ¸¸µé¶§ ¾î¶»°Ô È£ÃâÇß´À³Ä¿¡ °ü·ÃÀÌ ÀÖ½À´Ï´Ù.
|