´ñ±Û : 5 °³
Çѱ¹ µ¨ÆÄÀÌ µ¿È£È¸ µ¨¸¶´ç
coding
(±Ç¼øÈ£)
 
LoadLibrary()
GetProcAddress()

»ç¿ëÇÒ ÇÊ¿ä ¾ø°í¿ä.

procedure _f_GetDriverInfo(ap:PDriverInformation); cdecl; external 'test.dll' name '__f_GetDriverInfo';

procedure TForm1.Button1Click(Sender: TObject);
var
  di: TDriverInformation;
  pdi: PDriverInformation;
  cc: Char;
begin
  pdi := @di;
  di.Product_Name[0] := 'H';
  di.Product_Name[1] := Char(0);
  _f_GetDriverInfo(pdi);
  Caption := pdi^.Product_Name;
end;
 
2017-10-16 ¿ÀÈÄ 8:30:57
coding
(±Ç¼øÈ£)
 
C++ ÄÄÆÄÀÏ·¯¿¡¼­ extern "C"¸¦ »ç¿ëÇÏ°í
Äݸµ ÄÁº¥¼ÇÀ» µû·Î ÁöÁ¤ÇØÁÖÁö ¾ÊÀ¸¸é
µðÆúÆ®·Î _cdecl ÀÔ´Ï´Ù.

±×·² °æ¿ì export µÇ´Â ³×ÀÓ ¾Õ¿¡ ¾ð´õ¹Ù Çϳª°¡ ºÙ¾î¿ä
±×·¡¼­ À§¿Í °°ÀÌ ¾ÕºÎºÐÀº C++ ³×ÀÓ°ú µ¿ÀÏÇÑ ³×ÀÓÀ» ¾²°í
µÞºÎºÐÀº name Å°¿öµå¸¦ ÀÌ¿ëÇؼ­ ¾ð´õ¹Ù¸¦ Çϳª ºÙ¿©¼­
name alias¸¦ ¸¸µé¾î ÁØ °Ì´Ï´Ù. 
2017-10-16 ¿ÀÈÄ 9:49:34
´Ê±ï±âµ¨ÇǾð
(¹Úżº)
 
coding´Ô ´äº¯ °¨»çµå¸³´Ï´Ù.

dll¸¶´Ù °°ÀºÀ̸§À¸·Î ´Ù¸£°Ô ±¸ÇöµÈ ÇÔ¼öµéÀ» È£ÃâÇؾߠÇؼ­ dllÀ» µ¿ÀûÀ¸·Î È£ÃâÇؾߠÇؼ­ ÀÛ¼ºµÈ°ÍÀ̶󠼱¾ðºÎ¿¡ ¹Ù·Î ÁöÁ¤ÇÒ¼ö´Â ¾ø´Â »óÅÂÀÔ´Ï´Ù. 
2017-10-16 ¿ÀÈÄ 10:37:05
coding
(±Ç¼øÈ£)
 
function VerifyDriver(Info: PDriverInformation): Boolean;
var
  _f_GetDriverInfo : procedure(pdi : PDriverInformation); cdecl;

begin
  result := false;
  if DriverInstance = 0 then
    DriverInstance := LoadLibrary('project3.dll');
  if DriverInstance = 0 then exit;

  _f_GetDriverInfo := GetProcAddress(DriverInstance, '__f_GetDriverInfo');
  if @_f_GetDriverInfo = nil then exit;

  _f_GetDriverInfo(Info);
  PrintLog('DriverManager : [DRIVER] Product Name : %s', [Info^.Product_Name]);
  PrintLog('DriverManager : [DRIVER] Driver Name : %s', [Info^.Driver_Name]);
  FreeLibrary(DriverInstance);
end;
 
2017-10-16 ¿ÀÈÄ 11:22:09
´Ê±ï±âµ¨ÇǾð
(¹Úżº)
 
¶Ç ´äº¯À» ´Þ¾Æ Áּ̳׿ä.Çѹø ´õ °¨»çµå¸³´Ï´Ù.
Type
 Tf_GetDriverInfo = procedure (info: PDriverInformation);

var
 _f_GetDriverInfo: Tf_GetDriverInfo;

Áú¹®¿¡´Â ºüÁ®Àִµ¥ À§Ã³·³ º¯¼ö´Â ¼±¾ðµÇ¾î ÀÖ¾ú´Âµ¥ cdecl¸¦ Ã·ºÎÇÏ´Ï Á¤»óÀûÀ¸·Î ÀÛµ¿Çϳ׿ä.

Á¤¸» °¨»çµå¸³´Ï´Ù. ÄÚµù´Ô (--)(__)(--)

 
2017-10-16 ¿ÀÈÄ 11:52:16