|
µ¨¸¶´ç °ø½Ä ÀºÇà°èÁ |
ÇϳªÀºÇà 227-910235-83607 |
¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø) |
|
|
|
|
|
|
|
|
|
|
°ÁÂ, ÆÁ, Á¤º¸ |
°ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù. |
|
|
|
µ¨ÆÄÀÌ¿¡¼ VC DLL CString »ç¿ë |
coding
(±Ç¼øÈ£)
2018-09-28 ¿ÀÈÄ 1:09:58
Ä«Å×°í¸®:
ÆÁ
5618ȸ Á¶È¸
µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
|
|
|
´ÙÀ½°ú °°ÀÌ 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 ÀÌ¿ëÇؼ ´õ ½±°í °£·«ÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ÀÀ¿ëÀº ½º½º·Î. ¤»¤»
|
|
|
|
|
|
|
|
|