wymiana danych pomiędzy dll a exe

0

Witam! pewnie to proste ale nie moge znaleźć tu odp. na moje pytanie.
Mianowicie, mam ddl-a który robi coś tam. np wywolanie procedury w ddl-u uruchamia polecenie ShowMessage('jestem wywolany z ddl-a'); ok, działa, ale ja chce za pomocą ddl-a zmienic wartość Caption główniej formy i to już niestety nie działa, czyli moje pytanie brzmi: jak za pomocą dll-a zmieniać parametry programu takie jak caption, enabled czy top? Generalnie chodzi mi o to że procedura w bibliotece cos sobie wyliczy ale wynik tych obliczeń mam wykorzystać w programie.

0

Stwórz funkcję w DLL robiącą coś i wynik tej funkcji w programie przekazuj do odpowiedniej właściwości.

Na przykład ;)
Label.Caption := FunkcjaZDll(parametry);

Ewentualnie do DLL możesz przekazywać wskaźnik do komponentu, którego chcesz zmienić własność, ale to spowoduje, że będziesz musiał moduł z daną klasą dołączyć do listy modułów DLL, co spowoduje znaczne zwiększenie jej rozmiaru.

0

Też tak próbowałem ale program sie wywala, sam nie wiem dlaczego, jak widać kod jest bardzo prosty ale hmmm nie dziala :( funkcja z dll-a przekazuje swój rezultat do aplikacji, ale zaraz potem program sie wykrzacza i niebardzo wiem dlaczego.

oto moj kod DLL:

library dll;
function SetW(S : string): string; stdcall;
begin
result := 'czesc ' + S ;
end;

exports
SetW;
begin
end.

A to mam w EXE-ku:

procedure TForm1.Button1Click(Sender: TObject);
var
DLL : THandle;
MojaFunkcja : function (S : string): string; stdcall;
begin
DLL := LoadLibrary('DLL.dll');
MojaFunkcja := GetProcAddress(DLL, 'SetW');
form1.Caption := MojaFunkcja('jestem napisem');
FreeLibrary(DLL);
end;


W caption mojej formy po wcisnięciu buttona pojawia sie mile oczekiwany napis
"czesc jestem napisem" ale zaraz potem program sie sypie :( i niebardzo wiem czemu.

0

to może zacznij od czytania tego, co do Ciebie napisał Borland - wielkiego komentarza, który został dodany w bibliotece w momencie jej tworzenia :>

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