Cześć, mam następujący problem, którego się chyba nie da rozwiązać.
Mam dll(nie swoją) i wywołuję w niej funkcję. Jako jeden z parametrów przekazuję wskaźnik na funkcję, która ma zostać w pewnym momencie wykonana(u mnie).
Chciałem to sobie wszystko opakować w klasę w taki sposób(DllProc to jest ta część wywoływana przez DLL):
type
TDLLProc = function(params...): integer; stdcall;
TMyEvent = procedure(Sender: TObject; params....);
TMyClass = class
private
FOnEvent: TMyEvent;
FDLLProc: TDllProc;
function DllProc(params...): integer; stdcall;
public
property OnEvent: TMyEvent read FOnEvent write FOnEvent;
gdzieś tam w konstruktorze:
FDllProc:=DllProc;
I niby wszystko ładnie działa, ale w ciele funkcji DllProc okazuje się, że wartości parametrów są w nieco innym obszarze pamięci niż być powinny. Np. parametr o nazwie HANDLE ma adres: $12DF73C, ale tak naprawdę jego wartość jest w $12DF740.
Więc z metody DllProc zrobiłem funkcję nie będącą składnikiem klasy. I teraz wszystko działa, tylko że okazuje się, że mój zamysł, żeby zbudować sobie klasę szlag trafił, bo z poziomu funkcji chyba nie mogę wywołać zdarzenia w odpowiednim obiekcie. Chyba, że jest jakiś myk, o którym nie wiem(np. umieszczenie jakiejś globalnej referencji do obiektu, ale to trochę takie...). Ma ktoś jakiś ciekawy pomysł?
Jakby co to class function też nie daje rady.