Chodzi o to że gdy w programie wywołuje funkcje z biblioteki dll to chyba wcale ona się nie wykonuje. Cały czas zwraca 0.
Główny plik aplikacji:

#include <windows.h>

using namespace std;

HINSTANCE hInst;

std::string g_strKlasaOkna = "od0dogk_Window";
DWORD WINAPI HOOK(PVOID);


HMODULE hKBHookDLL;

typedef void (*LPSetKBHook)(void);
LPSetKBHook SetKBHook = NULL;

typedef unsigned long (*LPGetKeyStrokes)(void);
LPGetKeyStrokes GetKeyStrokes = NULL;
typedef unsigned long (*LPGetKeyCounter)(void);
LPGetKeyCounter GetKeyCounter = NULL;

typedef void (*LPKillKBHook)(void);
LPKillKBHook KillKBHook = NULL;

BOOL LoadHookDLL()
{
  hKBHookDLL = LoadLibrary("def.dll");
 if (!hKBHookDLL)return(0);
 SetKBHook = (LPSetKBHook)GetProcAddress(hKBHookDLL, "SetKBHook");
 if (!SetKBHook) return(0);

 GetKeyStrokes = (LPGetKeyStrokes)GetProcAddress(hKBHookDLL, "GetKeyStrokes");
 if (!GetKeyStrokes) return(0);
  GetKeyCounter = (LPGetKeyCounter)GetProcAddress(hKBHookDLL, "GetKeyCounter");
 if (!GetKeyCounter)return(0);

 KillKBHook = (LPKillKBHook)GetProcAddress(hKBHookDLL, "KillKBHook");
 if (!KillKBHook)return(0);

 SetKBHook();

 return(1);
}

void FreeHookDLL()
{
 KillKBHook();
 FreeLibrary(hKBHookDLL);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{	
 DWORD IdWatku;
 int x=3;
CreateThread(NULL, 0, HOOK, (PVOID)x, 0, &IdWatku);
   MSG msgKomunikat;
	  while (GetMessage(&msgKomunikat, NULL, 0, 0))
	{
	     TranslateMessage (&msgKomunikat);

         DispatchMessage (&msgKomunikat);

   }


   return static_cast<int>(msgKomunikat.wParam); 

}
DWORD WINAPI HOOK(PVOID)
{
	long int znak,ilosc=0,ilosc_temp=0,diff=0,ilosc_zn=0;

        LoadHookDLL();                         //zwraca 1, więc wszystko ok
	
while(1)
{
	
znak=GetKeyStrokes();                       //znak i ilosc zawsze sa równe 0, ale adresy do biblioteki tych funkcji są poprawne
ilosc_zn=GetKeyCounter();
if(ilosc_zn!=ilosc_temp)
{
ilosc_temp=ilosc_zn;
diff=ilosc_zn-ilosc_temp;
} else diff=0;
.
.
.
.
.

plik biblioteki:

#include <windows.h>

HHOOK hhook = NULL;
long int key = 0;
long int keycount = 0;
int pcount = 0;


HINSTANCE g_hInstance = NULL;
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
 if (dwReason == DLL_PROCESS_ATTACH)
 {
  if(pcount == 0)
  {
   // Init
   g_hInstance = hInstance;
  }
  pcount++;
 }
 else if (dwReason == DLL_PROCESS_DETACH)
 {
  if(pcount == 1)
  {
   // Free
  }
  pcount--;
 }
 return(1);
}

extern "C" _declspec(dllexport) LRESULT CALLBACK KBHookProc(int Code, WPARAM wParam, LPARAM lParam)
{
 if (Code < 0) return(CallNextHookEx(hhook, Code, wParam, lParam));

 if (lParam & (1 << 31)){ key=wParam; keycount++;}

 return(CallNextHookEx(hhook, Code, wParam, lParam));
}

extern "C" _declspec(dllexport) void SetKBHook()
{
 if (!hhook) hhook = SetWindowsHookEx(WH_KEYBOARD, KBHookProc, g_hInstance, 0);
}

extern "C" _declspec(dllexport) long int GetKeyStrokes()
{
	
 return(key);
}
extern "C" _declspec(dllexport) long int GetKeyCounter()
{
	
 return(keycount);
}

extern "C" _declspec(dllexport) void KillKBHook()
{
 if(hhook) UnhookWindowsHookEx(hhook);
}

Natomiast jeśli dll-kę używa program poniżej to wszystko jest ok.

//http://qsoft.cjb.net
//For any questions/comments/thing send an email to [email protected]
//Feel free to do with this anything you want!
//21/4/2001

#include <windows.h>
#include <stdio.h>
#include "resource.h"
long int ilosc_temp,diff;
HMODULE hKBHookDLL;

typedef void (*LPSetKBHook)(void);
LPSetKBHook SetKBHook = NULL;

typedef unsigned long (*LPGetKeyStrokes)(void);
LPGetKeyStrokes GetKeyStrokes = NULL;
typedef unsigned long (*LPGetKeyCounter)(void);
LPGetKeyCounter GetKeyCounter = NULL;

typedef void (*LPKillKBHook)(void);
LPKillKBHook KillKBHook = NULL;

BOOL LoadHookDLL()
{
 hKBHookDLL = LoadLibrary("def.dll");
 if (!hKBHookDLL) return(0);

 SetKBHook = (LPSetKBHook)GetProcAddress(hKBHookDLL, "SetKBHook");
 if (!SetKBHook) return(0);

 GetKeyStrokes = (LPGetKeyStrokes)GetProcAddress(hKBHookDLL, "GetKeyStrokes");
 if (!GetKeyStrokes) return(0);
  GetKeyCounter = (LPGetKeyCounter)GetProcAddress(hKBHookDLL, "GetKeyCounter");
 if (!GetKeyCounter) return(0);

 KillKBHook = (LPKillKBHook)GetProcAddress(hKBHookDLL, "KillKBHook");
 if (!KillKBHook) return(0);



 SetKBHook();

 return(1);
}

void FreeHookDLL()
{
 KillKBHook();
 FreeLibrary(hKBHookDLL);
}

BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch(msg)
 {
  case WM_INITDIALOG:
   if (!LoadHookDLL()) EndDialog(hDlg, 0);
   SetTimer(hDlg, 0, 10, NULL);
  break;
  case WM_COMMAND:
   switch(LOWORD(wParam))
   {
    case IDC_OK: EndDialog(hDlg, 0); break;
   }
  break;
  case WM_TIMER:
   switch(wParam)
   {
    case 0:
     HWND hTmp = GetDlgItem(hDlg, IDC_EDIT1);
     char str[50];

     sprintf(str, "%d", GetKeyStrokes());

	 long int ilosc_zn=GetKeyCounter();
	 ilosc_zn=GetKeyCounter();
if(ilosc_zn!=ilosc_temp)
{
ilosc_temp=ilosc_zn;
diff=ilosc_zn-ilosc_temp;
} else diff=0;
     SetWindowText(hTmp, str);
    break;
   }
  break;
  case WM_DESTROY:
   FreeHookDLL();
  break;
 }
 return(0);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DlgProc);
 return(1);
}

Co może być nie tak w pierwszym kodzie(a Visual nie wywala błędu)? Próbowałem także uruchomić pierwszy kod w projekcie tego działającego ale tez to samo...wiec to chyba nie ustawienia. Wiec co?