Dev-C++ ignoriert Code
-
Hi,
ich wolte eben die Hook-DLL aus den WinAPI-FAQ KeyboardHook compilieren.
Wenn ich alle Warnungen (Schalter -W und -Wall) anschalte teilt DevC++ mir mit Das Die Zeilen
#pragma data_seg ("Shared") #pragma data_seg () und #pragma comment (linker, "/section:Shared,RWS")
ignoriert werden.
Folglich vergißt Die DLL dann, wenn ich mein Programm teste auch den Handle des Fensters, an das die Nachrichten geschickt werden sollen (Nachrichten kommen nur an Wenn Fenster aktiv ist).
Müssen die pragma-Anweisungen unter MingW anders heißen (das Beispiel in der FAQ scheint ja für VC++ vorgesehen zu sein)?
mfg
j_freeze
-
pragmas gibts afaik beim gcc auch nicht. (welcher ja die Grundlage von MibGW bildet)
Du musst hier mit den Linker/Projektoptionen arbeiten. (-lbibliothek)cYa
DjR
-
klar gibts da #pragmas. nur nicht diese. das geht nur mit dem visual c++ compiler. ich hab auch gehört das diese shared sections noch nicht mal mit dem borland c++ builder funktionieren. kuck mal irgendwo in der BCB FAQ zum Mousehook. Da gabs eine Alternative mit File Mapping oder sowas.
-
Danke für den Tipp mit dem FileMapping. Es klappt!
ich habe folgenden Code in die Dll eingefügt:
in SetupHook:
gm_hFile = CreateFile( "c:\\test.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL); if( gm_hFile == INVALID_HANDLE_VALUE) MessageBox( 0, "Fehler 1", "szAppName", 0); ghFileMapping = CreateFileMapping( gm_hFile, NULL, PAGE_READWRITE, 0, 4, "testmap.txt"); if( ghFileMapping == 0) MessageBox( 0, "Fehler 2", "szAppName", 0); g_pGlobalData = (HWND*)MapViewOfFile( ghFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 4); if( g_pGlobalData == NULL) MessageBox( 0, "Fehler 3", "szAppName", 0); *g_pGlobalData = hFenster;
in KeyboardHookProc:
HANDLE hFileMapping; HWND *_pGlobalData; hFileMapping = OpenFileMapping( FILE_MAP_ALL_ACCESS, FALSE, "testmap.txt"); _pGlobalData = (HWND*)MapViewOfFile( hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 4); //SendMessage ((HWND) hFenster, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; SendMessage ( *_pGlobalData, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; UnmapViewOfFile( _pGlobalData); CloseHandle( hFileMapping);
in UninstallHook:
UnmapViewOfFile( g_pGlobalData); CloseHandle( ghFileMapping); CloseHandle( gm_hFile);
Wenn jemand einen Tipp hat wie es einfacher geht, oder doch ein MinGW-Pendant zu #pragma data_seg ("Shared") kennt postet dies doch bitte.
j_freeze