1. °³¹ß/½ÇÇà Ç÷§Æû (1) OS : Win10 (2) °³¹ßÅø : Berlin (3) »ç¿ë Database : No
2. °³¹ß ÁßÀÎ ÇÁ·Î±×·¥
3. Áú¹® ³»¿ë
C·Î ÀÛ¼ºµÈ Äڵ带 µ¨ÆÄÀÌ·Î Æ÷ÆÃÁßÀÔ´Ï´Ù. DllÂÊÀº ±×´ë·Î C++·Î ÀÛ¼ºµÈ°É ±×´ë·Î »ç¿ëÇÏ°í È£ÃâÇÏ´ÂÂʸ¸ µ¨ÆÄÀÌ·Î Æ÷ÆÃÇÒ·Á°í Çϴµ¥ ¿¡·¯°¡ ³ª´Âµ¥ µð¹ö±ëÀ» ¾î¶»°Ô ÇØÁà¾ß ÇÒÁö ¸ô¶ó¼ Áú¹®µå¸³´Ï´Ù.
<<Dll ºÎºÐ>
typedef struct structDRIVERINFO { wchar_t Product_Name[48]; /// Á¦Ç°¸í wchar_t Driver_Name[48]; /// µå¶óÀ̹ö À̸§ wchar_t Author[32]; /// µå¶óÀ̹ö Á¦ÀÛÀÚ int VersionH; /// ¹öÀü major int VersionL; /// ¹öÀü Minor wchar_t Description[64]; /// ¼³¸í wchar_t STX[128]; wchar_t ETX[128]; bool UseArraySTX; bool UseArrayETX; bool StartAtFirstBuffer; bool RestartAtSTX; bool STXAsDataSeparator; } DriverInformation;
extern "C" __declspec(dllexport) void _f_GetDriverInfo(DriverInformation *Info) { wcscpy(Info->Product_Name, PRODUCT_NAME); wcscpy(Info->Driver_Name, DRIVER_NAME); wcscpy(Info->Author, AUTHOR_NAME); wcscpy(Info->Description, DRIVER_DESC); Info->VersionH = VERSION_H; Info->VersionL = VERSION_L; wcscpy(Info->STX, START_CHAR); wcscpy(Info->ETX, END_CHAR); Info->UseArraySTX = USE_ARRAY_STX; Info->UseArrayETX = USE_ARRAY_ETX; Info->StartAtFirstBuffer = START_AT_FIRSTBUFFER; Info->STXAsDataSeparator = STX_AS_DATASEPARATOR; }
<µ¨ÆÄÀÌ ÂÊ> PDriverInformation = ^TDriverInformation; TDriverInformation = record Product_Name: array[0..47] of Char; /// Á¦Ç°¸í Driver_Name: array[0..47] of Char; /// µå¶óÀ̹ö À̸§ Author: array[0..31] of Char; /// µå¶óÀ̹ö Á¦ÀÛÀÚ VersionH: integer; /// ¹öÀü major VersionL: integer; /// ¹öÀü Minor Description: array[0..63] of Char; /// ¼³¸í STX: array[0..127] of Char; ETX: array[0..127] of Char; UseArraySTX: Boolean; UseArrayETX: Boolean; StartAtFirstBuffer: Boolean; RestartAtSTX: Boolean; STXAsDataSeparator: Boolean; end; function TMSDKDriver.VerifyDriver(Info: PDriverInformation): Boolean; begin result := false; if DriverInstance = 0 then DriverInstance := LoadLibrary(PChar(FDriverFileName)); 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]); end;
f_GetDriverInfo(Info); ÁÙ¿¡¼ access violation ¿¡·¯°¡ ³³´Ï´Ù.
exe¿Í dll·Î ºÐ¸®µÇ¾î ÀÖ¾î¼ ºê·¹ÀÌÅ·Æ÷ÀÎÅ͸¦ °É¾î¼ ÇÔ¼ö³»ºÎ·Î µé¾î°¡ º¼·Á°í Çصµ ¹æ¹ýÀ» Àß ¸ð¸£°Ú³×¿ä.
¿©±â¼ Áú¹®
if @f_GetDriverInfo = nil then exit;
Àº ½ÇÇàÀÌ µÇ¹Ç·Î ÀÏ´Ü ÇÔ¼ö¸¦ È£ÃâÇϴ°ͱîÁö´Â ¹®Á¦°¡ ¾ø´Â°Í °°Àºµ¥ ±×·³ ÇÔ¼öÀÎÀÚÀÇ ¹®Á¦°¡ ¾Æ´Ò±î
ÀǽÉÀÌ µË´Ï´Ù. C ±¸Á¶Ã¼¿Í Á¦°¡ Æ÷ÆÃÇÑ Delphi ±¸Á¶Ã¼°¡ µ¿ÀÏÇÑ°ÍÀÎÁö ±Ã±ÝÇÕ´Ï´Ù.
¸¸¾à ÀÎÀÚ¿¡ ÀÌ»óÀÌ ¾ø´Ù¸é ¾î´ÀÂÊÀ» »ìÆìºÁ¾ß ÇÒ±î¿ä?
|