델파이로 dll을 만들어서 사용하고
vb에서 델파이로 만들어진 dll을 호출해서 원하는 값을 리턴 받는 프로그램 인데요..
vb에선 아래와 같은 사용자 타입을 지정해서
Public Type Tmp_str
f1 As String * 400
End Type
아래와 같이 선언해서 함수를 호출하면
Dim a As String
Dim b As Tmp_str
funName(a, b)
델파이 dll 에선 아래와 같이 타입을 만든 후에
type
stype = record
b1 : pchar
end;
아래와 같이 호출합니다.
Function Idea_funName(a :pchar ;var b:stype):integer; stdcall;
var
msg1 : Pchar;
msg2 : String;
begin
msg2 :='abc';
GetMem(msg1,length(msg2) + length(a)+1);
StrCopy(msg1, pchar(msg2));
StrCat(msg1, pos_no);
a.b1 := msg1;
//strpcopy(a.b1,msg);
//GetMem(a.b1,length(msg2)+1);
//strpcopy(a.b1,pchar(msg2));
end;
Result := 0;
위와 같이 사용하는데요..
사용자 타입을 안하고 그냥 String로 하게 되면 정상적으로 값이 리턴이 되는데
사용자 타입으로 하게 되면 쓰레기 값이 나오게 됩니다.
열심히 검색해본 결과 strpcopy를 사용해보았는데도 역시 쓰레기 값이 나오네요..
저의 초보적인 질문에 관심좀 부탁드릴게요..
참고하세요.
그런 버그를 없애자면 레코드를 클라스로 만들거나 포인터를 리용해야 합니다.