<!--CodeS-->
type
aaa = packed record
a1 : PChar;
a2 : PChar;
a3 : PChar;
end;
paaa = ^aaa
bbb = packed record
b1 : PChar;
b2 : PChar;
b3 : PChar;
a1 : aaa;
end;
pbbb = ^bbb
dllfile = function ( abc : pchar,
bbb : pbbb );
<!--CodeE-->
이런 포인터 구조체가 있을때
bbb구조체에는 aaa 구조체가 포함됩니다.
이럴경우 dll을 호출할 때 bbb : pbbb는 파라메터를 어떻게 넘겨야 하는지요..
a1 := '111';
a2 := '222';
a3 := '333';
b1 := '555';
b2 := '777';
b3 := '999';
이렇게 하면 bbb 구조체는 aaa 구조체를 포함할까요?
컴파일 에러는 없는데, 실행시 Access Violation 에러가 나오네요.
invalid pointer 같은 에러도 나오고요.
어째 질문이 횡설수설하네요.. 죄송합니다.
이용후에는 dipose나 freemem으로 해제하는것이 좋구요.
procedure fcall(abc: pchar; vb: pbbb);
external 'project2.dll';
...
procedure TForm1.btn1Click(Sender: TObject);
var vv : pbbb;
begin
New(vv);
vv.b1 := 'b1'; vv.b2 := 'b2'; vv.b3 := 'b3';
vv.a1.a1 := 'a1.a1';
vv.a1.a2 := 'a1.a2';
vv.a1.a3 := 'a1.a3';
fcall('abc', vv);
Dispose(vv);
end;
// dll부분
procedure fcall(abc: pchar; vb: pbbb);
var ss : string;
begin
ss := abc + '|' + vb.b1 + '|' +vb.b2 + '|' +vb.b3 +
'|' +vb.a1.a1 + '|' +vb.a1.a2 + '|' +vb.a1.a3;
ShowMessage(ss);
end;