Kommunikáció DLL file-on keresztül Delphi-ben
2013-12-04T21:22:13+01:00
2013-12-13T00:39:45+01:00
2022-08-17T17:25:35+02:00
Relative
Sziasztok!

Delphi-ben készítettem egy DLL file-t, ami két funkciót tartalmaz: set_text() és get_text().

Működése: A set_text() funkcióval küldök egy szöveget a DLL-nek, amit az tárol egy stored_text változóban. A get_text() funkcióval pedig le tudom kérdezni a stored_text változó tartalmát.

A kód hibátlanul működik, ha a két funkciót ugyanazzal a programmal hívom meg.

Azonban én a két funkciót két különböző programmal szeretném meghívni: Program-1 küldi a szöveget a DLL file-nak. Majd Program-2 kiolvassa a szöveget a DLL file-ból.

Hol a hiányosság a kódomban? Valamilyen globális változóként kellene kezelnem a stored_text változót, hogy két program egyidejűleg ugyanazt az adatot tudja belőle kiolvasni.

Van valamilyen ötletetek, hogy hogyan oldható meg az adatátvitel?

Előre is köszönök minden segítséget!


Üdv.
Zsolt

________________________________

Forráskód:


library DLL_Communication_v402; uses SysUtils, Math; {$R *.res} var stored_text: PChar; // SET TEXT function set_text( x: PChar): integer; stdcall; begin stored_text := x; result := 0; end; // GET TEXT function get_text(): PChar; stdcall; begin result := PChar(stored_text); end; exports set_text, get_text; // Main Program begin end.
Mutasd a teljes hozzászólást!
Csatolt állomány
A globális változó megoldható egy modullal. A dll fájlban felveszed a globális változót tartalmazó modul azonosítóját.
Pl:
library DLL_Communication_v402; uses SysUtils, Math, GlobalisValtozotTartalmazoModul;

Akkor a GlobalisValtozotTartalmazoModult a dll is és a programok is használhatják. A globális változót, a modul globálisan elérhető részében kell elhelyezned.Vagyis:
unit GlobalisValtozotTartalmazoModul; interface var sorted_text: PChar; implementation begin end.

Ez is egy alternatíva.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd