Dll
-
Ich habe ein Problem mit typedef:
- main.cpp
// includes #include <windows.h> #include "dll/dll.h" #include "resource.h" // functions LRESULT CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // public HHOOK hHook; HMODULE hDLL=NULL; // dll typedef typedef int (CALLBACK* pSH)(); typedef int (CALLBACK* pDH)(); typedef int (CALLBACK* pSHW)(HWND*); // dll functions pSH pSetKbHook; pDH pDestroyKbHook; pSHW pSetHitWindow; // api entry int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd) { // private MSG message; WNDCLASS wc; // init wc ZeroMemory(&wc, sizeof(WNDCLASS)); wc.hInstance = hInstance; wc.lpfnWndProc = (WNDPROC)MainDlgProc; wc.lpszClassName = "hook"; RegisterClass(&wc); // load the dll hDLL = LoadLibrary("dll.dll"); // success? if(hDLL!=NULL){ pSetKbHook = reinterpret_cast<pSH>(GetProcAddress(hDLL, "SetKbHook")); pDestroyKbHook = reinterpret_cast<pDH>(GetProcAddress(hDLL, "DestroyKbHook")); pSetHitWindow = reinterpret_cast<pSHW>(GetProcAddress(hDLL, "SetHitWindow")); } else MessageBox(0, "failed to load dll", "error", 0); // show main dialog DialogBox(hInstance, MAKEINTRESOURCE(ID_DLG_MAIN), 0, (DLGPROC) MainDlgProc); // loop while(GetMessage(&message, NULL, 0, 0)){ TranslateMessage(&message); DispatchMessage(&message); } return 0; } // the window proc LRESULT CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { // switch switch(msg){ // on create case WM_INITDIALOG: // set window to top SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // success? if(pSetKbHook()){ HWND temp = GetDlgItem(hWnd, ID_STATIC_HITS); pSetHitWindow(&temp); // HIER STÜRZT DAS PRO AB } return FALSE; // on close case WM_CLOSE: pDestroyKbHook(); PostQuitMessage(0); return 0; } // return def return FALSE; }
- dll.cpp
// includes #include <windows.h> #include "dll.h" // functions LRESULT CALLBACK KeyboardHookProc(int, WPARAM, LPARAM); // public HINSTANCE hDllInstance; HHOOK hKeyboardHook; long cKeys=0; // api entry int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { ... } // function to set hook int SetKbHook(void) { ... } // function to destroy the hook int DestroyKbHook(void) { ... } // function to destroy the hook // HIER STÜRZT DAS PROG AB int SetHitWindow(HWND *hHitWnd) { SetWindowText(hHitWnd, "AlteHure"); return 0; } // callback function LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) { ... }
- dll.h
#ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT int SetKbHook(); EXPORT int DestroyKbHook(); EXPORT int SetHitWindow(HWND *hHitWnd);
Beim Compilieren kommen keine Fehler, beim Linken kommen ebenfalls keine Fehler.
Aber beim Aufruf der Funktion kommt ein Fehler (Convention...)Also falls ihr wisst, was ich falsch mache, sagt es mir einfach.
Danke!
cu para
-
Wie wärs mal, wenn du überprüfst, ob die Funktionen überhaupt geladen wurden?!
-
Schau dir mal die Deklaration der Funktionen in der DLL an.
int Bla();In der Exe schreibst du aber
int CALLBACK Bla();Lass einfach das CALLBACK weg. Das ändert nämlich die Aufrufkonvention. Das ist vollkommen überflüssig und führt zu deinem Fehler.
-
Hey. Keine Doppelpostings!
Hier gehts weiter: Hook
[ Dieser Beitrag wurde am 24.11.2002 um 16:43 Uhr von cd9000 editiert. ]