头文件编译时出问题了.高手帮忙,进来接分.

bestoak 2007-12-01 09:08:37
我就是想写一个小程序模拟键盘输入方向键的右,在实况足球,NBA live等游戏里面能用.这个钩子哪错了,帮忙看看啊?
最后一步需要一个外壳程序就搞定了.可是编译有问题.点激活后激活钩子,然后在游戏画面按k键即可,按锁闭按钮就撤销钩子.
首先是ActiveKey工程.MFC AppWizard(dll)
ActiveKey.h
#ifndef _KEYDLL_H
#define _KEYDLL_H

class AFX_EXT_CLASS CKeyHook: public CObject
{
public:
CKeyHook();
~CKeyHook();
HHOOK Start();
//安装钩子
BOOL Stop(); //卸载钩子
};
#endif

ActiveKey.cpp

#include "stdafx.h"
#include <afxdllx.h>
#include "ActiveKey.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//Shared data section
#pragma data_seg("sharedata")
HHOOK glhHook=NULL; //钩子句柄。
HINSTANCE glhInstance=NULL; //DLL实例句柄。
#pragma data_seg()

static AFX_EXTENSION_MODULE ActiveKeyDLL = { NULL, NULL };

//键盘钩子处理函数。
extern "C" LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( nCode > = 0 )
{
if( wParam == 'k' )//当按下k键时,激活。
{
//实现代码。
keybd_event(39,1,0,0);
Sleep(1000);
keybd_event(39,1,KEYEVENTF_KEYUP,0);
Sleep(500);
}
}
return CallNextHookEx(glhHook,nCode,wParam,lParam);
}

CKeyHook::CKeyHook(){}
CKeyHook::~CKeyHook()
{
if( glhHook )
Stop();
}
//安装全局钩子。
HHOOK CKeyHook::Start()
{
glhHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);//设置键盘钩子。
return glhHook;
}
//卸载全局钩子。
BOOL CKeyHook::Stop()
{
BOOL bResult = TRUE;
if( glhHook )
bResult = UnhookWindowsHookEx(glhHook);//卸载键盘钩子。
return bResult;
}

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
//如果使用lpReserved参数则删除下面这行
UNREFERENCED_PARAMETER(lpReserved);

if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("NOtePadHOOK.DLL Initializing!\n");
//扩展DLL仅初始化一次
if (!AfxInitExtensionModule(ActiveKeyDLL, hInstance))
return 0;
new CDynLinkLibrary(ActiveKeyDLL);
//把DLL加入动态MFC类库中
glhInstance = hInstance;
//插入保存DLL实例句柄
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("NotePadHOOK.DLL Terminating!\n");
//终止这个链接库前调用它
AfxTermExtensionModule(ActiveKeyDLL);
}
return 1;
}

ActiveKey.def
; ActiveKey.def : Declares the module parameters for the DLL.

LIBRARY "ActiveKey"
DESCRIPTION 'ActiveKey Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here

SECTIONS
sharedata Read Write Shared

rebuild all后生成了.ActiveKey.dll和ActiveKey.lib两个玩意儿.我把他们放到Simulation工程里面了.
然后是Simulation工程.MFC AppWizard(exe)->dialog based.
给两个按钮"激活","锁闭"分别用classView加了两个click事件.一个是m_hook.Start();//激活全局钩子。另一个是m_hook.stop();//撤销全局钩子。
同时把ActiveKey.h复制到了Simulation文件夹.并在stdAfx.h中加入include "ActiveKey.h"
最后在project->settings->link里面设置了ActiveKey.lib,然后rebuild all.结果如下:

Deleting intermediate files and output files for project 'Simulation - Win32 Debug'.
--------------------Configuration: Simulation - Win32 Debug--------------------
Creating Type Library...
Processing D:\C\Simulation\Simulation.odl
Simulation.odl
Processing D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\oaidl.idl
oaidl.idl
Processing D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\objidl.idl
objidl.idl
Processing D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\unknwn.idl
unknwn.idl
Processing D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\wtypes.idl
wtypes.idl
Compiling resources...
Compiling...
StdAfx.cpp
d:\c\Simulation\activekey.h(4) : error C2079: 'CKeyHook' uses undefined class 'AFX_EXT_CLASS'
d:\c\Simulation\activekey.h(4) : error C2239: unexpected token ':' following declaration of 'CKeyHook'
d:\c\Simulation\activekey.h(4) : error C2059: syntax error : 'public'
Error executing cl.exe.

Simulation.exe - 3 error(s), 0 warning(s)


请问哪里错了呢?

...全文
294 点赞 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jsphuang 2007-12-10
已经把编译好的发送到你的MAIL里了。
你在stdafx.h
这个头文件中还有
#include"ActiveKey.h"
把它注释掉。
回复
bestoak 2007-12-10
那唯有意愿留下邮箱,小弟可以把代码打包发给您看看.
回复
bestoak 2007-12-10
什么意思?
没明白.去掉哪个stdafx.h里面的哪个头文件?
弄好了就结帖的,我也不想拖这么久,帮下忙.
回复
jsphuang 2007-12-10
stdafx.h
中的原来的包含没有去掉!!
回复
bestoak 2007-12-09
我把ActiveKey.h里面的class AFX_EXT_CLASS CKeyHook: public CObject 改成class _declspec(dllexport) CKeyHook: public CObject还是编译有错误.
回复
iyranly 2007-12-09
到msdn里面搜索RC1004错误,看看错误原因!
回复
jsphuang 2007-12-09
是普通的工程配置问题吧。
回复
bestoak 2007-12-09
大家帮帮我.
回复
bestoak 2007-12-08
嗯?
回复
bestoak 2007-12-03
to 零度:

DLL EXPORT 是def文件中那个么?
我改了,可是会报错.
怎么回事?
有没有什么hook这方面的书推荐几本呢?
小弟是在太菜,都不好意思问了.
回复
stivenjia 2007-12-03
Compiling resources...
D:\C\Simulation\ActiveKey.h(13) : fatal error RC1004: unexpected end of file found
Error executing rc.exe.

Simulation.exe - 1 error(s), 0 warning(s)

以外的文件结尾,可能是忘记;号或者是豫编译头文件的问题。
所以一般情况下DLL Exports最好为“extern "C" __declspec(dllexports) int a(void);”便于检查错误。
一堆的@@什么的是在不好看
回复
bestoak 2007-12-03
to 电风扇恶魔.

是不是就是把外壳程序Simulation里面的ActiveKey.h里面那个'AFX_EXT_CLASS'改成__declspec(dllimport)呢?
我改了,还是不行.能说具体一些么.具体在哪改呢?
小弟新手,麻烦您了.
回复
thenshesaid 2007-12-03
在APP工程中引用的时候把CKeyHook前的'AFX_EXT_CLASS' 改成__declspec(dllimport)
具体看看MSDN就清楚了
回复
bestoak 2007-12-02
还是不行.
到底少了哪一步了?
回复
lisunlin0 2007-12-02
#include "stdafx.h"试试看,
或者设置没有预编译头文件也可.
回复
snowbirdfly 2007-12-02
fatal error RC1004: unexpected end of file found
那估计应该是重复包含某个头文件吧~
回复
bestoak 2007-12-02
我弄好了,可是出了新的问题.

Compiling resources...
D:\C\Simulation\ActiveKey.h(13) : fatal error RC1004: unexpected end of file found
Error executing rc.exe.

Simulation.exe - 1 error(s), 0 warning(s)


这是怎么事?
回复
jsphuang 2007-12-02
#include "ActiveKey.h"
放在使用m_hook那个类的头文件中。
回复
bestoak 2007-12-02
高手帮帮忙,小弟虚心请教.
回复
bestoak 2007-12-01
嗯,我才学hook,可以说是已经通了九窍.指点一下啊.怎么错了?
回复
加载更多回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2007-12-01 09:08
社区公告
暂无公告