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
|
|
|