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?