[winapi] makro DLL_API
Ostatnio zmodyfikowano 2011-11-10 19:03
Drraven |
» 2011-11-06 18:07:19 Mam Linuxa, nie kompiluje nic pod windowsa. Taki mój kaprys. |
|
kill Temat założony przez niniejszego użytkownika |
» 2011-11-06 18:12:49 no nic to jeszcze pokombinuje może uda się coś wymyślić ^.^
|
|
pekfos |
» 2011-11-06 18:46:09 Mnie się "zdaje" że DLL_API trzeba SAMEMU zdefiniować w kodzie jako alias do __declspec( dllexport ) .. |
|
kill Temat założony przez niniejszego użytkownika |
» 2011-11-06 19:03:40 pefkos wklepałem zamiast DLL_API: __declspec (dllexport) i nie działa |
|
pekfos |
» 2011-11-06 19:06:50 |
|
kill Temat założony przez niniejszego użytkownika |
» 2011-11-06 19:12:14 Dllmain #include "dll.h" #include <windows.h> #include <vector> using namespace std;
vector < EVENTMSG > g_Events; int g_CurrentEvent; bool g_PlaybackStopped; HHOOK g_RecordHook = NULL; HHOOK g_PlaybackHook = NULL; DWORD g_StartTime = 0; HINSTANCE g_hInst = NULL;
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { g_hInst = hModule; switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
DLL_API LRESULT CALLBACK RecordProc( int code, WPARAM wParam, LPARAM lParam ) { if( code < 0 ) return CallNextHookEx( 0, code, wParam, lParam ); if( code == HC_ACTION ) { EVENTMSG * msg =( EVENTMSG * ) lParam; msg->time -= g_StartTime; g_Events.push_back( * msg ); return 0; } return CallNextHookEx( 0, code, wParam, lParam ); }
DLL_API LRESULT CALLBACK PlaybackProc( int code, WPARAM wParam, LPARAM lParam ) { if( code < 0 ) return CallNextHookEx( 0, code, wParam, lParam ); if( code == HC_GETNEXT ) { EVENTMSG * msg =( EVENTMSG * ) lParam; msg->hwnd = g_Events[ g_CurrentEvent ].hwnd; msg->message = g_Events[ g_CurrentEvent ].message; msg->paramH = g_Events[ g_CurrentEvent ].paramH; msg->paramL = g_Events[ g_CurrentEvent ].paramL; msg->time = g_StartTime + g_Events[ g_CurrentEvent ].time; DWORD delta = msg->time - GetTickCount(); if( delta > 0 ) return delta; else return 0; } else if( code == HC_SKIP ) { if( !g_PlaybackStopped ) g_CurrentEvent++; if( g_CurrentEvent >= g_Events.size() ) { g_CurrentEvent = 0; g_StartTime = GetTickCount(); g_PlaybackStopped = false; return 0; } } return 0; }
DLL_API void StartRecording( void ) { g_StartTime = GetTickCount(); g_RecordHook = SetWindowsHookEx( WH_JOURNALRECORD, RecordProc, g_hInst, 0 ); }
DLL_API void StartPlayback( void ) { g_CurrentEvent = 0; g_StartTime = GetTickCount(); g_PlaybackStopped = false; UnhookWindowsHookEx( g_RecordHook ); g_PlaybackHook = SetWindowsHookEx( WH_JOURNALPLAYBACK, PlaybackProc, g_hInst, 0 ); }
dll.h extern "C" { DLL_API void StartPlayback( void ); DLL_API void StartRecording( void ); }
W glównym pliku progamu jest tylko ladowanie bibliotek i funkcji oraz wywolanie funkcji po nacisnieciu odpowiednich klawiszy - mysle ze to jest nie istotne |
|
pekfos |
» 2011-11-06 19:14:34 jak masz taki plik .h to się nie dziwię. czytaj kurs bo nie masz pojęcia o DLL. |
|
kill Temat założony przez niniejszego użytkownika |
» 2011-11-06 19:15:38 cały plik .h mam taki: #ifndef _DLL_H_ #define _DLL_H_
#if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else # define DLLIMPORT __declspec (dllimport) #endif #define DLL_API __declspec( dllexport )
extern "C" { DLL_API void StartPlayback( void ); DLL_API void StartRecording( void ); }
#endif
|
|
1 2 « 3 » 4 5 6 7 |