VC++ dll source를 아래와 같이 고친 후 프로그래밍을 하였습니다.
VC++ source:
WORD CALL MPS_InCmm( BYTE, DWORD, WORD, BYTE *,WORD *);
Delphi:
MPS_InCmm: function(CplNum: BYTE;
Command: Cardinal;
DataLg: Word;
pDataBuf: PBYTE;
SW1SW2: PWord): Word; cdecl {$IFDEF WIN32} stdcall {$ENDIF};
그리고 난 후, 델파이의 editbox에 있는 데이터들을 serial로 보내는 과정인데 아래와 같이 코딩을 하였습니다.
GetMem(Data, 256);
GetMem(StatusByte, 32);
j := 1;
for i := 1 to (Length(memoDATA.Lines.Text) div 2) do
begin
tempString := Byte(StrToInt('$' + Copy(memoDATA.Lines.Text, j, 2)));
//memo의 string을 두 개씩 합하여 한 바이트로 설정
Send_Data[i] := @tempString;
j := j + 2;
end;
Data := @Send_Data;
RET := MPS_InCmm(Coupler, Cardinal(StrToInt('$' + APDU)), Word(StrToInt('$' + editLC.Text)), Data, StatusByte);
memoDATA.Lines.Text에 있는 데이터들을 바이트단위로 전송을 해야하는데, 함수에서는 pointer로 넘겨줘야 하기 때문에 for loop를 써서, 배열에 저장한 후, 배열의 주소를 넘겨줬다고 생각을 하는데..
아마도 Data parameter 전달이 잘못 된 듯 생각이 됩니다.
코딩에 잘못이 있는 것 같은데, 아시는 계시면 수정 좀 부탁드립니다.
감사합니다.