Q&A

  • VC++로 만든 dll에 스트링을 넘길때 알수 없는 이상현상발생
안녕하세요. 저좀 도와주세요.



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바이트단위로 움직이는지 알수가 없네요.

고수님들의 답변 기다리겠습니다.















1  COMMENTS
  • Profile
    kylix 2001.03.16 07:41
    뒤에 쓰레기값이 오더라도 상관 없지 않나요? 어차피 PChar형인데 마지막 NULL문자이후론



    뭐가 오든 상관없을거 같은데요. 그 뒤의 영역은 메모리할당받지도 않았고 사용하지도 않는



    영역인데... 정 맘에 걸리신다면 더 많은 메모리를 할당받아서 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바이트단위로 움직이는지 알수가 없네요.

    > 고수님들의 답변 기다리겠습니다.

    >

    >

    >

    >

    >

    >

    >