typedef struct tagEncodeInfo {
char *Info_partNum; // 파트 넘버 입력용
char *Info_serialNum; // 시리얼 번호 입력용
char *Info_productDate; // 생산 날짜 입력용
unsigned short int uiAntiTheft; // 인코딩되서 생성된 비밀 번호
} ENCODEINFO, *PENCODEINFO;
DLL 구조는 저렇게 되어 있고요...
이걸 델파이에서 사용시
type tagEncodeInfo = packed record
Info_partNum: array[0..9] of PChar;
Info_serialNum: array[0..9] of PChar;
Info_productDate: array[0..7] of PChar;
uiAntiTheft: Smallint;
end;
RtagEncodeInfo = tagEncodeInfo;
SDLL_GetPass = function(var Gegpass : RtagEncodeInfo): boolean; stdcall;
var
H: tHandle;
parStream : RtagEncodeInfo;//파라메다형을 PDT_STATUS
Encoder : SDLL_GetPass;
i: integer;
hDLL : HWND;
...................
hDLL := GetModuleHandle('DWISEncoder.dll');
while True do begin
if hDLL <> 0 then
FreeLibrary(hDLL)
else
Break;
end;
H := LoadLibrary( PChar( 'DWISEncoder.dll' ));
if H < 32 then begin
ShowMessage( 'dll function address not found!' );
Exit;
end;
@Encoder := GetProcAddress(H, 'Encoder');
if @Encoder <> Nil then begin
// 파라메타로 넘기는 값을 넣어주고
FOR I := 1 TO 10 DO BEGIN
parStream^.Info_partNum[i-1] := pchar(COPY(TXT_BUYERMODEL.Text,I,1));
END;
FOR I := 1 TO 10 DO BEGIN
parStream^.Info_serialNum[i-1] := PCHAR(COPY(TXT_SN.Text,I,1));
END;
FOR I := 1 TO 8 DO BEGIN
parStream^.Info_productDate[I-1] := PCHAR(COPY(PROD_DATE.Text,I,1));
END;
if Encoder(parStream) then begin
showmessage(inttostr(parStream^.uiAntiTheft));
end;
FreeLibrary(H);
end;
이렇게 값을 받고 싶은데 제대로 넘어오질 않네요...
도대체 무엇이 잘못된 걸까요 ???
고수님들의 진지한 의견을 기다리고 있읍니다...!!
Info_partNum: array[0..9] of PChar;
==>
char * Info_partNum[10];