一个莫名其妙的错误

清钟沁桐 2008-10-25 02:55:28
#include <afxwin.h>
// #include <windows.h>

class CKeybHookApp : public CWinApp
{
public:
CKeybHookApp();
DECLARE_MESSAGE_MAP()
};

CKeybHookApp theApp;
LRESULT CALLBACK LaunchHook(int nCode,WPARAM wParam,LPARAM lParam);
HHOOK kbHook;

// #define pCW ((CWPSTRUCT*)lParam)

LRESULT CALLBACK LaunchHook(int nCode,WPARAM wParam,LPARAM lParam)
{
// 让其它全局钩子获得消息.
LRESULT Result=CallNextHookEx(kbHook,nCode,wParam,lParam);
//AfxMessageBox("LaunchHook");
if(nCode==HC_ACTION)
{
LPCTSTR info = NULL;
if( (lParam & WM_KEYDOWN) == WM_KEYDOWN)
{
info = "key dn";
}
else if( (lParam & WM_KEYUP) == WM_KEYUP)
{
info = "key up";
}
else if( (lParam & WM_SYSKEYDOWN) == WM_SYSKEYDOWN)
{
info = "sys key down";
}
else ( (lParam & WM_SYSKEYUP) == WM_SYSKEYUP )
{ // 41 行
info = "sys key up";
}
MessageBox(NULL,(LPCTSTR)info,"win",MB_OK)
} // 45 行

return Result;
}

int main (void)
{
kbHook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)LaunchHook,
theApp.m_hInstance, 0 );

if( kbHook==NULL ) {
MessageBox(NULL,"error SetWindowsHookEx","win",MB_OK);
return 0;
}

// 消息循环是必须的,想知道原因可以查msdn
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};

UnhookWindowsHookEx (kbHook);
return 0;
};

上面的程序编译运行时提示:
(41) : error C2143: syntax error : missing ';' before '{'
dd1.cpp(45) : error C2143: syntax error : missing ';' before '}'
但是这里明明 {} 已经配对了呀 ??
...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amuro1987218 2008-10-27
  • 打赏
  • 举报
回复
你声明了CKeybHookApp的构造函数却没有实现它,如果只需要编译器默认提供的构造函数则去掉该构造函数的声明。

后2个LINK错误去工程设置里检查运行库是否为多线程(调试)
估计你用的VC6
清钟沁桐 2008-10-27
  • 打赏
  • 举报
回复

#include <afxwin.h>
#include <windows.h>

class CKeybHookApp : public CWinApp
{
public:
CKeybHookApp();
DECLARE_MESSAGE_MAP()
} theApp;


LRESULT CALLBACK LaunchHook(int nCode,WPARAM wParam,LPARAM lParam);
HHOOK kbHook;

// #define pCW ((CWPSTRUCT*)lParam)

LRESULT CALLBACK LaunchHook(int nCode,WPARAM wParam,LPARAM lParam)
{
// 让其它全局钩子获得消息.
LRESULT Result=CallNextHookEx(kbHook,nCode,wParam,lParam);
if(nCode==HC_ACTION)
{
LPCTSTR info = NULL;
if( (lParam & WM_KEYDOWN) == WM_KEYDOWN)
{
info = "key dn";
}
else if( (lParam & WM_KEYUP) == WM_KEYUP)
{
info = "key up";
}
else if( (lParam & WM_SYSKEYDOWN) == WM_SYSKEYDOWN)
{
info = "sys key down";
}
else if( (lParam & WM_SYSKEYUP) == WM_SYSKEYUP )
{
info = "sys key up";
}
else
{
info = "others";
}
MessageBox(NULL,info,"win",MB_OK);
}

return Result;
}

int main (void)
{
kbHook=(HHOOK)SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)LaunchHook, theApp.m_hInstance, 0 );

if( kbHook==NULL ) {
MessageBox(NULL,"error SetWindowsHookEx","win",MB_OK);
return 0;
}

// 消息循环是必须的,想知道原因可以查msdn
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};

UnhookWindowsHookEx (kbHook);
return 0;
};
现在按照您说的修改后还是由问题:
dd1.obj : error LNK2001: unresolved external symbol "public: __thiscall CKeybHookApp::CKeybHookApp(void)" (??0CKeybHookApp@@QAE@XZ)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Amuro1987218 2008-10-25
  • 打赏
  • 举报
回复
MessageBox(NULL,(LPCTSTR)info,"win",MB_OK)
说了少个分号,没说你不配对
Amuro1987218 2008-10-25
  • 打赏
  • 举报
回复
else ( (lParam & WM_SYSKEYUP) == WM_SYSKEYUP )

else没有带条件的,是else if

注意基本语法的掌握。
嵌云阁主 2008-10-25
  • 打赏
  • 举报
回复
呵呵,往前找错误。
清钟沁桐 2008-10-25
  • 打赏
  • 举报
回复
恩 可还是不行

还有一个呢 ??(41) : error C2143: syntax error : missing ';' before '{'

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧