读书人

全局变量出现未定义标识符解决办法

发布时间: 2013-07-11 15:38:46 作者: rapoo

全局变量出现未定义标识符
用试验hook时发现一个已经定义了全局变量的变量,在dllmain.cpp中显示未定义标示符
求大神解惑

dllmain.app中的代码



// dllmain.cpp : 定义 DLL 的初始化例程。
//

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


static AFX_EXTENSION_MODULE ActivityKeyDLL = { NULL, NULL };

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(ActivityKeyDLL, hInstance))
return 0;
new CDynLinkLibrary(ActivityKeyDLL);
//把DLL加入动态MFC类库中
glhInstance=hInstance;//出错点提示glhInstance未定义标识符
//插入保存DLL实例句柄
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("NotePadHOOK.DLL Terminating!\n");
//终止这个链接库前调用它
AfxTermExtensionModule(ActivityKeyDLL);
}
return 1;
}



主文件中的代码

// ActivityKey.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "ActivityKey.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//shared data section全局共享数据
#pragma data_seg("sharedata")
HHOOK glhHook=NULL; //钩子句柄。
HINSTANCE glhInstance=NULL; //dll实例句柄。(此处申明了glhInstance变量)
#pragma data_seg()


extern "C" LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if( nCode >= 0 )
{
if( wParam == 0X79 )//当按下F10键时,激活外挂。
{
//外挂实现代码。
CPoint newPoint,oldPoint;
GetCursorPos(&oldPoint);
newPoint.x = oldPoint.x+40;
newPoint.y = oldPoint.y+10;
SetCursorPos(newPoint.x,newPoint.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模拟按下鼠标左键。
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模拟放开鼠标左键。
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0); //按下SHIFT键。
keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//按下R键。
keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);//放开R键。
keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);//放开SHIFT键。
SetCursorPos(oldPoint.x,oldPoint.y);
}
}
return CallNextHookEx(glhHook,nCode,wParam,lParam);
}

CKeyHook::CKeyHook()
{

}



CKeyHook::~CKeyHook()
{
Stop();
}

//install static hook
BOOL CKeyHook::Start()
{
BOOL bResult=FALSE;
glhHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);//设置键盘钩子。
if(glhHook!=NULL)
bResult=TRUE;
return bResult;
}
//卸载全局钩子。
BOOL CKeyHook::Stop()
{
BOOL bResult = TRUE;
if( glhHook )
bResult = UnhookWindowsHookEx(glhHook);//卸载键盘钩子。
return bResult;
}


[解决办法]
dllmain.cpp需要include "ActivityKey.h"
[解决办法]
变量没导入吗?

dllmain.cpp中
extern HINSTANCE glhInstance;
[解决办法]
在http://www.codeproject.com搜“hook”

读书人网 >C++

热点推荐