Problem beim "Tasten-Hook" aus der FAQ
-
Hallo,
ich habe in der FAQ eine interessante Lösung gesehen, wie man die Tasten systemweit abfangen kann, leider bekomme ich es nicht hin dies nachzumachen.
Beitrag: http://www.c-plusplus.net/forum/viewtopic.php?t=39145Ich beschreibe mal Schritt für Schritt meine Vorhergehensweise:
1. Neu->DLL-Experte => ich kopiere den Quelltext in die Unit1.cpp
2. Neu->Formular => ich nenne (Name) das Formular KeyHookForm, weils der Quelltext so verlangt und kopiere nun den Quelltext in die Unit2.h
3. Ich kopiere den letzten Quelltext in die Unit2.cpp
4. Projekt->Optionen->Compiler => Endgültig
5. Ich kompiliereHeraus kommt eine Fehlermeldung und die DLL Project1.dll, die ich in keydll.dll umbenenne, was die Fehlermeldung aber nicht verschwinden lässt.
Fehlermeldung:
in Unit2.cpp
-Fehler in der Deklaration
-Qualifizierer 'TKeyHookForm' ist kein Name einer Klasse oder Struktur
-Deklaration nicht ordnungsgemäß abgeschlossenDie Fehlermeldungen werden an den kommentierten Stellen gegeben:
#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TKeyHookForm *KeyHookForm; //+++Fehlermeldung hier+++ extern "C" __declspec(dllexport) __stdcall void SetHook(void); extern "C" __declspec(dllexport) __stdcall void RemoveHook(void); extern "C" __declspec(dllexport) __stdcall DWORD CheckKey(int, WORD,LONG); //--------------------------------------------------------------------------- __fastcall TKeyHookForm::TKeyHookForm(TComponent* Owner) //+++Fehlermeldung hier+++ : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TKeyHookForm::KeyHook(TMessage &Message) { char Key[80]; GetKeyNameText(Message.LParam, Key, 80); ListBox1->Items->Add(Key); } //--------------------------------------------------------------------------- void __fastcall TKeyHookForm::FormCreate(TObject *Sender) { SetHook(); } //--------------------------------------------------------------------------- void __fastcall TKeyHookForm::FormDestroy(TObject *Sender) { RemoveHook(); }
Ich hoffe Ihr könnt mir bei der Lösung meines Problems helfen, ich glaube ich habe die ganze DLL-Geschichte irgendwie falsch verstanden.
gruß
ravel
-
Hi,
die unit2 von dir, sollte nicht in die DLL rein! Also erst DLL erstellen (komplieren) und dann NEU->ANWENDUNG und die Kode dann in die neue Unit kopieren! Dann müsste es klappen!MFG
Alexander Sulfrian
-
Du brauchst 2 Projekte: ein DLL- und ein EXE-Projekt. Das DLL-Projekt kommt ganz ohne Forms aus.
-
Hallo!
Vielen Dank, Ihr habt mir schon sehr geholfen, leider bekomme ich nun eine weitere Fehlermeldung, die da heißt:
[Linker Fehler] Unresolved external 'SetHook' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UNIT1.OBJ [Linker Fehler] Unresolved external 'RemoveHook' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UNIT1.OBJ
Sagt Euch das was?
gruß
ravel
-
Hast du die DLL-Lib zu deinem Projekt hinzugefügt?
-
Hallo!
Du hast recht, ich habe vergessen die *.lib einzubinden, jetzt klappt alles!
Vielen Dank!
gruß
ravel