Przesylanie rekordu z DLL

0

Witam mam biblioteke DLL a w niej rekord zawierajacy dane potrzebne mi w glownym programie.
Jak mozna wyslac ten rekord do glownego programu ?
Co ma zwrocic funckja ?? :|

np. type TDane = packed record
cos : string[11];
end;

nastepnie inna funkcja zapelnia ten rekord, a potem chce do przeslac poprzez inną funkcję do głównego programu np.

function dawaj(cos : string) : nie_wiem_co_tu_dac

0

Rekord TDane?

0

TDane to po prostu nazwa !
Chodzi o przeslanie rekordu z danymi uzupelnionymi przez kilka funkcji wewnetrznych z biblioteki -> do głownego programu

0
TRekord = record 
 s:string[10];
end;
PRekord = ^TRekord;

W Programie:

var t:PRekord;
begin
  new(t);
  FunkcjaZDll(parametr, t);
end;

w Dll:

procedure FunkcjaZDll(parametr:Pchar; res:PRekord);
begin
   res^.s[2]:='t';
end; 
0

Mniej skomplikowanie:
W bibliotece DLL

type TJakisRekord=packed record
 // Jakieś farmazońskie dane
end;

function DawajDane(jakisParam:String):TDane;
begin
 // Farmazony, które chcesz sobie robić w tej funkcji
end;

exports
 DawajDane name 'FarmazonskaFunkcja';

i w programie:

function DawajDane(jakisParam:String):TDane stdcall external 'farmazony.dll' name 'FarmazonskaFunkcja';

FarmazonskaZmienna:=DawajDane(FarmazonskiParametr);
0
adiblol napisał(a)

Mniej skomplikowanie:
W bibliotece DLL

type TJakisRekord=packed record
 // Jakieś farmazońskie dane
end;
function DawajDane(jakisParam:String):TDane;
begin
 // Farmazony, które chcesz sobie robić w tej funkcji
end;

Primo niepotrzebne zapychanie stosu, secundo używanie stringów w komunikacji dll<->świat jest niebezpieczne

0
Qyon napisał(a)

secundo używanie stringów w komunikacji dll<->świat jest niebezpieczne

Kto zaczął komunikację DLL<->świat? Co?

0

jak windows to komunikatem WM_COPYDATA

1 użytkowników online, w tym zalogowanych: 0, gości: 1