Ok, if someone can explain why the message box inside the following dll is not working i would really appreciate it. The message box isnt meant to serve any purpose, im just screwing around but i'd like to know why it isnt working as i will have a use for DllMain at a later time. I have also tried using the message box in the DETACH case but that doesnt work either.

Im loading the dll using

hInstDll = LoadLibrary((LPCTSTR) "dlllog\\DllLog.dll");

and every thing loads fine etc, the other code to stop the keyboard input works fine.

QUOTE
#include <windows.h>
//Code to stop keyboard output reaching its target window

extern "C" int __declspec(dllexport) KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    return 1;
}

BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) {

  switch (fdwReason) {
      case DLL_PROCESS_ATTACH:
          MessageBox(0, "stuff", "more stuff", 0);
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;

      case DLL_PROCESS_DETACH:
        break;
  }
  return(TRUE);  // Used only for DLL_PROCESS_ATTACH
}


Thanks (i promise this is the last thread i'll make about dll's. Well for today anyway wink.gif )By the way a friend of mine ran this and said it worked fine. WTF? also im loading it using loadlibrary. That all works fine as any other functions in it i can use fine. Im not calling DllMain but it should work automatically right?

here is my main app code if you want to see
QUOTE

#include <windows.h>
#include "keylogres.h"

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

static HINSTANCE hInstDll; //handle to the dll
HOOKPROC hkPrcLog; //the address of the function within the dll

static HHOOK hHookLog; //a handle to the hook
                   

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hprevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd, start_hwnd;              /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
          0,                  /* Extended possibilites for variation */
          szClassName,        /* Classname */
          "Keyblocker",      /* Title Text */
          WS_OVERLAPPEDWINDOW, /* default window */
          CW_USEDEFAULT,      /* Windows decides the position */
          CW_USEDEFAULT,      /* where the window ends up on the screen */
          200,                /* The programs width */
          120,                /* and height in pixels */
          HWND_DESKTOP,        /* The window is a child-window to desktop */
          NULL,                /* No menu */
          hInstance,      /* Program Instance handler */
          NULL                /* No Window Creation data */
          );
         
    start_hwnd = CreateWindow(
        "Button",
        "Start blocking",
        WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
        10,
        10,
        100,
        30,
        hwnd,
        HMENU(IDB_STARTLOG),
        hInstance,
        NULL
        );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case IDB_STARTLOG:
                  //Load the dll containing the hook, find the KeyboardProc and set the hook
                    hInstDll = LoadLibrary((LPCTSTR) "G:\\Dev-Cpp\\dlllog\\DllLog.dll");
                    //hInstDll = LoadLibraryEx("dlllog\\DllLog.dll", NULL, DONT_RESOLVE_DLL_REFERENCES );
                    if(hInstDll == NULL){
                        MessageBox(0, "Error loading dll file", "Error", 0);
                    }   
                    hkPrcLog = (HOOKPROC)GetProcAddress(hInstDll, "KeyboardProc");
                    if(hkPrcLog == NULL){
                        MessageBox(0, "Error loading hook proc file", "Error", 0);
                    } 
                    hHookLog = SetWindowsHookEx(WH_KEYBOARD, hkPrcLog, hInstDll, 0);
                    if(hHookLog == NULL){
                        MessageBox(0, "Error loading dll file", "Error", 0);
                    }else{
                        MessageBox(0, "Blocking started", "Success", MB_OK);
                    }   
                    break;
          }
          break;                     
        case WM_DESTROY:
            PostQuitMessage (0);      /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
   
}