안녕하세요. 저좀 도와주세요.
VC++로 만든 dll로 스트링을 전달하는데, 좀 이상해요,
dll 함수에서는 (unsigned char *) 를 받기로 되어있어요.
델파이에서는 아래와 같이 call 하고 있습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
FPDCode : TFPDCode;
passwd : string;
begin
passwd := Edit1.Text;
@FPDCode := GetProcAddress(m_LibHandle, 'FPDCode');
if not (@FPDCode = nil) then
FPDCode(passwd);
end;
제가 dll쪽에서 받은 값을 hex값으로 debug 해보면,
가령, (4자리이상) 1234 를 전달하면 [31323334 00000000 .....]
이렇게 다음 4바이트는 null로 초기화되어 들어오더군요.
그런데, 4자리 미만 123 을 전달하면 [31323300 0E020000.....]
와 같이 뒤쪽에 쓰레기 값이 오는데, 이것들도 null로 초기화 하려는데
아무리 해도 되질 않습니다.
왜 4바이트단위로 움직이는지 알수가 없네요.
고수님들의 답변 기다리겠습니다.
뭐가 오든 상관없을거 같은데요. 그 뒤의 영역은 메모리할당받지도 않았고 사용하지도 않는
영역인데... 정 맘에 걸리신다면 더 많은 메모리를 할당받아서 0으로 초기화 하세요...
제 생각에는 3바이트 보냈으면 3바이트만 제대로 받으면 문제가 없을거 같은데요...
C와의 교신에는 string보다는 PChar형을 이용하세요...
김상호 wrote:
> 안녕하세요. 저좀 도와주세요.
>
> VC++로 만든 dll로 스트링을 전달하는데, 좀 이상해요,
> dll 함수에서는 (unsigned char *) 를 받기로 되어있어요.
>
> 델파이에서는 아래와 같이 call 하고 있습니다.
> procedure TForm1.Button1Click(Sender: TObject);
> var
> FPDCode : TFPDCode;
> passwd : string;
> begin
> passwd := Edit1.Text;
>
> @FPDCode := GetProcAddress(m_LibHandle, 'FPDCode');
> if not (@FPDCode = nil) then
> FPDCode(passwd);
> end;
>
> 제가 dll쪽에서 받은 값을 hex값으로 debug 해보면,
> 가령, (4자리이상) 1234 를 전달하면 [31323334 00000000 .....]
> 이렇게 다음 4바이트는 null로 초기화되어 들어오더군요.
>
> 그런데, 4자리 미만 123 을 전달하면 [31323300 0E020000.....]
> 와 같이 뒤쪽에 쓰레기 값이 오는데, 이것들도 null로 초기화 하려는데
> 아무리 해도 되질 않습니다.
>
> 왜 4바이트단위로 움직이는지 알수가 없네요.
> 고수님들의 답변 기다리겠습니다.
>
>
>
>
>
>
>