Witam wszystkich:]
Mam problem z importowaniem funkcji do programu z biblioteki dll, ucze się od nie dawna winapi więc prosze o wyrozumiałość. Program kompiluje Dev-C++ niby wszystko ok ale dll'ka nie startuje, nie wiem dlaczego.
Kod programu:
#include <windows.h>
HINSTANCE hinstDLL;
LRESULT CALLBACK NaszaProcedura(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_CREATE:
hinstDLL = LoadLibrary((LPCTSTR) "dll.dll");
break;
case WM_DESTROY:
FreeLibrary(hinstDLL);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hOkno; //uchwyt okna
MSG message; //struktura komunikatów
WNDCLASS okno; //klasa okna
okno.hInstance = hInstance; //uchwyt instancji
okno.lpszClassName = "klasa główna"; //nazwa klasy okna
okno.lpfnWndProc = NaszaProcedura;
okno.lpszMenuName = NULL; //brak menu
okno.style = 0; //standardowe okno
okno.hIcon = LoadIcon (NULL, IDI_APPLICATION); //standardowa ikona
okno.hCursor = LoadCursor (NULL, IDC_ARROW); //standardowy kursor
okno.hbrBackground = (HBRUSH)COLOR_WINDOW; //czarny kolor
okno.cbClsExtra = 0; //brak przydziału dodatkowej pamieci dla klasy okna
okno.cbWndExtra = 0; //brak przydziału dodatkowej pamieci okna
if(!RegisterClass (&okno)) return 0; //rejestracja klasy okna
hOkno = CreateWindow ("klasa główna", "Program", WS_OVERLAPPEDWINDOW, 100,100,200,100, NULL, NULL, hInstance, NULL); //utworzenie okna
ShowWindow(hOkno, SW_SHOW); //wyświetlenie okna na ekranie
UpdateWindow(hOkno);
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage (&message);
DispatchMessage (&message);
}
}
Kod bibliteki dll (dll.cpp):
#include "dll.h"
#include <windows.h>
DWORD dTimeIdle=0;
static HHOOK hhookKeyb;
DLLIMPORT LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
static HINSTANCE hinstDLL = hModule;
static HOOKPROC hkprcKeyb;
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "Ładowanie biblioteki", "Info", MB_OK);
hhookKeyb = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hinstDLL, 0);
if(!hhookKeyb)
MessageBox(NULL, "Ustawienie HOOK'a NIE powiodło się", "Info", MB_OK | MB_ICONERROR);
else
MessageBox(NULL, "Ustawienie HOOK'a powiodło się", "Info", MB_OK);
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, "Wyładowywanie biblioteki ;)", "Info", MB_OK);
if(!UnhookWindowsHookEx(hhookKeyb))
MessageBox(NULL, "Usunięcie HOOK'a NIE powiodło się", "Info", MB_OK | MB_ICONERROR);
else
MessageBox(NULL, "Usunięcie HOOK'a powiodło się", "Info", MB_OK);
break;
}
return TRUE;
}
//keyboard hook functions
DLLIMPORT LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
char tab[255];
if (nCode < 0)
return CallNextHookEx(hhookKeyb, nCode, wParam, lParam);
if((lParam & 0x80000000) == 0)
return CallNextHookEx(hhookKeyb, nCode, wParam, lParam);
wsprintf(tab, "%c %x", wParam, wParam);
MessageBox(NULL, tab, "Wirtualny kod wciśniętego klawisza",MB_OK);
return CallNextHookEx(hhookKeyb, nCode, wParam, lParam);
}
Kod bibliteki dll (dll.h):
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);
private:
};
#endif /* _DLL_H_ */