Witam, jak robiłem to w konsoli na stringach to wszystko działało.
type
TLibTab= array [1..3] of array [1..3] of byte;
function ArrayToPChar(tab: TLibTab): PChar; stdcall;
var
i,j: byte;
s: string;
begin
for i := high(tab) downto low(tab) do
begin
if (i mod 2 = 0) then
begin
for j := high(tab) downto low(tab) do
begin
s := s+inttostr(tab[j,i]);
end;
end else
begin
for j := low(tab) to high(tab) do
begin
s := s+inttostr(tab[j,i]);
end;
end;
end;
result := PChar(s);
end;
function PCharToArray(tekst: PChar): TLibTab stdcall;
var
i,j,k: byte;
tab: TLibTab;
begin
k := 1;
for i := high(tab) downto low(tab) do
begin
if (i mod 2 = 0) then
begin
for j := high(tab) downto low(tab) do
begin
tab[i,j] := StrToInt(tekst[k]);
k := k+1;
end;
end else
begin
for j := low(tab) to high(tab) do
begin
tab[i,j] := StrToInt(tekst[k]);
k := k+1;
end;
end;
end;
result := tab;
end;
procedure zrob(tab: TLibTab); stdcall;
var
tekst: PChar;
tab1: TLibTab;
i,j: byte;
begin
tekst := ArrayToPchar(tab);
MessageBox(0, tekst, 'Hello', MB_OK + MB_ICONINFORMATION);
tab1 := PCharToArray(tekst);
end;
ArrayToPChar działa bez problemów. Problem pojawia do dopiero przy PCharToArray jedyne co się pojawia to okienko błedu z tym czerwonym X o treści
'
Ps. przy okazji spytam bo jeszcze z tym nie próbowałem. Czy da się wywołać dll w dll (w jednej dll chce użyć procedur z innej dll)