#include <windows.h>
#include "csdn_test1.h"       //把接口和实现分开写便于调试和包含头文件#pragma data_seg("Share")
HHOOK      HookHwnd=NULL;
HINSTANCE  HinstDll=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:Share,RWS")//LRESULT WINAPI KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
          ~~~~~~这儿应该定义成回调函数CALLBACK。
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam);BOOL WINAPI DllMain(HANDLE hInst,ULONG reason,LPVOID lpReserved)
{
HinstDll=(HINSTANCE)hInst;//保存本DLL的实例句柄
if(HinstDll!=NULL)        //setwindowshookex时该实例句柄不可为空
return(TRUE);
return(FALSE);
}
DLLEXPORT bool StartHook(void)
{ if(HookHwnd==NULL)
{
HookHwnd=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,HinstDll,0L);
if(HookHwnd!=NULL)
MessageBox(NULL,"In StartHook : Ok","hi",MB_OK);  //调试
return (HookHwnd!=NULL);
}
return(FALSE);
}LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)

if(code==HC_ACTION)

// switch(wParam) 
//case 0x97:    //这样写是不对的,屏蔽掉之后按键便可弹出消息框。
MessageBox(NULL,"U PRESS A","Message",MB_OK);return 1;
}
return CallNextHookEx(HookHwnd,code,wParam,lParam);
}     你的程序主要问题在 keyboardproc应该是回调函数、Dll实例句柄不应该为空
还有接口和实现应该分开。
     你可能想通过按下‘A’ 实现弹出消息框,我不知道这个wParam中是否是字符
ASCII码。感觉可能是错的。