±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 µ¨ÆÄÀÌ¿¡¼­ VC DLL CString »ç¿ë
coding
(±Ç¼øÈ£)
2018-09-28 ¿ÀÈÄ 1:09:58
Ä«Å×°í¸®: ÆÁ
5195ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
´ÙÀ½°ú °°ÀÌ CStringÀ» »ç¿ëÇϴ VC++ DLL ÀÌ ÀÖÀ» ¶§
µ¨ÆÄÀÌ ÂÊ¿¡¼­ CString ÂüÁ¶Çϴ ¹æ¹ýÀ» Àû¾î º»´Ù.

// VC++ 2017¿¡¼­ CStringÀº templateÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù.
#include "stdafx.h"
#include <atlstr.h>

CString s;

extern "C" {
    __declspec(dllexport) CString& GetCString()  // exported function
    {
        s = L"From VC CString";
        return s;  // return CString reference
    }
}


µ¨ÆÄÀÌ ÂÊ¿¡¼­ ·¹ÆÛ·±½º·Î ¸®ÅϵǴ CStringÀ» »ç¿ëÇϱâ À§Çؼ±

// rad 10.2.3 

implementation

type
  PCString = ^CString;
  CString = record end; // class°¡ ¾Æ´Ñ record·Î ÇÑ °ÍÀº µ¨ÆÄÀÌ¿¡¼± ¸ðµç Å¬·¡½º°¡
                        // Implicit·Î TObject¸¦ »ó¼ÓÇϱ⠶§¹®¿¡ ºÒÇÊ¿ä ÇÏ°Ô VMT
                        // Å×À̺íÀÌ »ç¿ëµÇ±â ¶§¹®.

function GetCString(): PCString; cdecl; external 'test.dll' name 'GetCString';

type
  stringEx = record helper for string
    class function vc<T>(const V: T): string; static;
  end;

class function stringEx.vc<T>(const V:T): string;
begin
  Result := PChar(PDword(PDword(@V)^)^);
end;

// s ³ª Caption¿£ "From VC CString"ÀÌ Ãâ·Â µÉ °ÍÀÓ. 
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
   // instance·Î È£Ãâ ÇÒ ¼öµµ ÀÖ°í
   s := s.vc(GetCString());
   // ´ÙÀ½°ú °°À̠ȣÃâ ÇÒ ¼öµµ
   Caption := string.vc(GetCString());
end;


¹Ý´ë·Î VC++ ÂÊ¿¡¼­ µ¨ÆÄÀÌ ´ÙÀ̳ª¹Í ¾î·¹À̳ª string, TForm Å¬·¡½º µîÀ» ¾×¼¼½ºÇϴ °ÍÀº 
template ÀÌ¿ëÇؼ­ ´õ ½±°í °£·«ÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ÀÀ¿ëÀº ½º½º·Î. ¤»¤»