dll kozystajacy z procedury programu glownego

0

Witam

Czy jest możliwość wywołania procedury/funkcji z biblioteki dll?
Chodzi o to że w programie głównym mam jakieś tam komponenty typu suwaki którymi ustawiam jakieś wartości.
W tym programie ładuje bibliotekę i chcę aby procedura z tej biblioteki widziała te wartości ustawione na suwakach.
Niestety nie mogę tych wartości przesłać jako parametr gdyż są one modyfikowane również w trakcie działania tej procedury znajdującej się w bibliotece.
Czy się zrobić aby odczytać te dane z programu głównego z poziomu biblioteki?
Czy muszę się bawić w zapisywanie do ini po każdej zmianie suwaka a w bibliotece to odczytywać?

Mam nadzieje że jasno opisałem problem i czekam na pomoc.

0

zapomnialem dopisac, jezyk to delphi
chyba ze istnieje mozliwosc nie odczytu danych z programu glownego a wywolanie z niego procedury przez dll-ke

0

Najlepiej przekazać obiekt - komponent jako parametr dla procedury w dllce i wtedy można w takcie jej trwania sprawdzać jaka jest pozycja na przykład ScrollBara odwołując się do tego parametru, a więc nie wiem z czym masz problem. A żeby Twoja dllka wywoływała procedurę z kodu głownego też się da. Chociaż nie wiem czy do końca takie rozwiązanie ma sensowne zastosowanie, ale może ma.

Przykład dllki:

library Project2;

type
  TProcedure = procedure;

procedure BleBle(Proc : TProcedure);
begin
  if @Proc <> nil then
  begin
    Proc;
  end;
end;

exports
  BleBle;

begin
end.

Wycinek przykładowego kodu modułu:

//...
type
  TProcedure = procedure;

procedure SiupDup;
begin
  ShowMessage('Działa!');
end;

procedure TForm1.FormCreate(Sender : TObject);
var
  H : THandle;
  AProc : procedure(Param : TProcedure);
begin
  H := LoadLibrary('.\project2.dll');
  if H > 0 then
  begin
    AProc := GetProcAddress(H, 'BleBle');
    if @AProc <> nil then
    begin
      AProc(SiupDup);
    end
  end;
end;
//...

O ile oczywiście dobrze zrozumiałem co chcesz osiągnąć. Jeżeli nie to może ktoś inny jeszcze coś Tobie tutaj lepszego doradzi.

0

Dlaczego chcesz zapisywać te zmieniające się wartości do pliku? Wystarczy wywołanie funkcji z każdą zmianą tej wartości. W uproszczeniu, wywołanie funkcji z załadowanej biblioteki niewiele różni się od wywołania twojej własnej funkcji - są to w gruncie rzeczy tak samo kosztowne operacje i spokojnie możesz to robić np. tysiące razy na sekundę.

0

Czy jest możliwość wywołania procedury/funkcji z biblioteki dll?

Tak, słowo klucz: Interfejsy.

0

chodzi o to że mam haka na klawiaturę w dll. Z funkcji obsługującej haka chce wywołaś z głównego programu inna procedurę.
A jeśli to problem to mogę ta procedurę również umieścić w dll ale muszę mieć dostęp do ustawień między innymi do pozycji scrollbara

0

w glownym programie mam taki kod:

procedure Hook(b: byte); stdcall external 'KeyHook.dll' name 'Hook';

procedure TOkno.FormCreate(Sender: TObject);
begin
   Hook(22);
end;

a w bibliotece:

procedure Hook(a: byte);
begin
 //
end;

exports
  Hook name 'Hook';

i wywala mi Access Violation
jak mam przeslac objekt do biblioteki skoro nawet byte nie moge poslac?

1

i wywala mi Access Violation
jak mam przeslac objekt do biblioteki skoro nawet byte nie moge poslac?

Ojejku! Jesteś na tyle głupi żeby nie podać miejsca błędu ani dokładniejszych informacji! Ale na szczęście ja jestem na tyle mądry że widzę problem! Następnym razem postaraj się napisać tak żebym nie musiał ciebie wyzywać!

procedure Hook(b: byte); stdcall external 'KeyHook.dll' name 'Hook';
Przetłumacz to słowo po słowie sobie a potem porównaj z deklaracją w bibliotece. Jeżeli nadal będziesz mieć problem to podaj nam co wszystkie słowa po kolei oznaczają w deklaracji.

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