Hook dll -> Fehler in Funktion???
-
hi hi,

habe da eine kleine Funktion die müsste man sich mal anschauen:LRESULT __declspec(dllexport)__stdcall CALLBACK message_hook( int code, WPARAM wp, LPARAM lp) { if( code >= 0 ) { if (wp == VK_F2) bPush = TRUE; else bPush = FALSE; } return CallNextHookEx(hhk, code, wp, lp); }Der Boolsche Wert bPush ist vorher "Global" deklariert wurden. So wenn ich jetzt in meinem Fenster, indem ich eine Hook gesetzt habe (Funktioniert alles mit dem Hook habe alles überprüft), die Taste F2 drücke müsste er eigentlich bPush auf TRUE setzen. Das macht er auch aber innerhalb der Funktion. Sobald ich ihn jetzt 2 Funktionen weiter unten aufrufen will ist er plötzlich wieder auf Startwert. Ich kann mir da nichts draus reimen warum er die Information verschling ich versteh das nicht.
Zuerst habe ich ja noch gedacht das liegt an __stdcall weil der Stack gelöscht wird aber auch Pustekuchen ich kann mir jetzt langsam nicht mehr weiterhelfen.
Das ist eine Funktion aus einer DLL die ich mit einem anderen Programm öffne. Den Wert bPush benötige ich um in dem anderen Programm zu erfahren ob die Taste nun gedrückt war oder nicht.Für jede Hilfe bin ich dankbar.

thx
Hellsogre
-
Habe ich Dich richtig verstanden? Du verwendest 2 verschiedene Programme die auf die DLL zugreifen und die globale Variabel bPush gemeinsam nutzen sollen?
Dann hilft Dir vielleicht folgender Artikel aus der MSDN weiter:Win32-DLLs werden im Adreßraum des aufrufenden Prozesses zugeordnet. Standardmäßig hat jeder Prozeß, der eine DLL verwendet, eigene Instanzen der globalen und statischen DLL-Variablen. Wenn Ihre DLL die Daten für andere, von einer anderen Anwendung geladenen Win32-DLLs oder für unterschiedliche Zuordnungen derselben DLL freigeben muß, dann können Sie eines der folgenden Verfahren anwenden:
Erstellen Sie mit Hilfe der #pragma-Anweisung benannte Datenabschnitte.
Verwenden Sie Dateien mit Haupt-Speicherzuordnung.
Um einen neuen, benannten Abschnitt einzurichten, verwenden Sie die Direktive #pragma data_seg. Danach müssen Sie die richtigen Freigabeattribute für diesen neuen, benannten Datenabschnitt in Ihrer .DEF-Datei angeben. Weitere Informationen über das Erstellen von benannten Datenabschnitten finden Sie in den folgenden Artikeln der Knowledge Base:"How to Share Data Between Different Mappings of a DLL" (Q125677).
"Specifying Shared and Nonshared Data in a DLL" (Q100634).
"How to Specify Shared and Nonshared Data in a DLL" (Q89817).
"Sharing All Data in a DLL" (Q109619).
-
Ich danke dir genau das habe ich Schussel nicht beachtet. Musste nur ne kleine Pragma setzen und siehe da er hat die Daten bei beiden gehandelt wie ich das wollte. Dankeschön
Thx
Hellsgore