Entwickler-Ecke
Sonstiges (Delphi) - Variablen in DLLs
ArnF - So 22.09.02 16:32
Titel: Variablen in DLLs
Ich bin gerade Dabei einen Keyboard-Hook zu schreiben. Dabei übergebe ich beim installieren des Hooks, der in einer DLL-Datei ist, mehrere Werte. Diese Werte speicher ich dann in intern deklarierte Variablen.
Diese Variablen werden aber zurückgesetzt, sobald die Installationsprozedur beendet ist.
Wie kann ich es schaffen, dass die Werte in den Variablen erhalten bleiben?
Manfred - Mo 23.09.02 12:06
Hi!
Verrate uns doch bitte einmal, wo Du die Variablen eigentlich deklarierst? In der Hauptunit der DLL können Variablen deklariert werden, deren Inhalt über die Laufzeit der DLL erhalten bleiben. Vielleicht startest Du auch unbemerkt eine zweite Instanz der DLL?
ArnF - Do 26.09.02 16:19
Aufgerufen werden die Funktinen in der DLL über
Quelltext
1:
| Function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall; external 'keyboardhook.dll'; |
Ausschnitt aus der DLL:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| library KeyboardHook;
uses ...
var HookHandle: hWnd = 0; WindowHandle: hWnd = 0; WTime: Integer;
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); if nCode<0 Then exit; if wParam=Ord('S') Then if (lParam and Trunc(Power(2,31)))=Trunc(Power(2,31)) Then begin //Wird ausgeführt, wenn "S" losgelassen wird //WindowHandle und WTime sind jetzt 0; end; end;
function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); WindowHandle := Hwnd; //Hier wird WindowHandle gesetzt Result := TRUE; WTime:=WaitTime; //Hier wird WTime gesetzt end; end;
exports InstallHook, UninstallHook; end. |
Bei der Installations-Funktion werden die Variablen WaitTime und HWND übergeben und in die Variablen WTime und WindowHandle übergeben.
Bei der Hauptprozedur, die auf die Tastatureingaben reagiert, kann diese Variablen nicht mehr auswerten, da diese wieder 0 sind.
Kann es vielleicht am Aufruf über "external ..." liegen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!