keyboardproc做了一个全局钩子,同时,该dll导出一全局变量,在主调程序中只能得到该全局变量的初始值?该如何处理

keyboardproc做了一个全局钩子,同时,该dll导出一全局变量,在主调程序中只能得到该全局变量的初始值?
本帖最后由 VisualEleven 于 2012-10-08 21:08:29 编辑
我用c++语言,keyboardproc 做了一全局钩子(keyhook.dll),同时,该dll导出一个全局变量 exitflag; 但是在主调程序(控制台应用程序)中,只能得到该全局变量的初始值,不能得到 keyhook.dll处理后的值?部分源代码如下:

//keyhook.h
#include <Windows.h>    
#define DllExport _declspec(dllexport)
extern DllExport int exitflag;  //导出的全局变量exitflag,
....

//dllmain.cpp
....
extern int exitflag=1;    //变量初始化;
....

//keyproc.cpp
....
case VK_F1:
if(ctrlflag==1 && altflag==1)         //如果ctrl,alt都处于按下状态,此时弹起F1;EXITFLAG=1  
         { exitflag=0;
           MessageBox(NULL,TEXT("dll:exitflag=0 "),TEXT("OK"),0);   
         }
....


//controlmain.cpp             控制台主程序
....
extern int _declspec(dllimport) exitflag;          //在主调进程中,导入那个全局变量exitflag;
....
if(!Installhook())
MessageBox(NULL,TEXT("Install hook fail "),TEXT("OK"),0);  
getchar();                 
printf("%d",exitflag);
getchar();
exit;
....

控制台主程序生成后,运行,切换至桌面,我按下ctrl+alt+F1,DLL中的那个调试的消息框弹出来,但是,再按Enter,控制台输出的依然是1,不明白,到底怎么调用该 全局变量,或者说有什么别的方法,让我在控制台中,使用那个exitflag?
------解决方案--------------------
大概就是下面这个样子的:

主控程序:
int* i;
GetData(&i); //调用dll中的GetData函数
printf("%d\r\n",*i);

dll:
void GetData(int** i)
{
 *i=&exitflag;  //将地址指向欲获取的数据的地址
}
------解决方案--------------------
试试这样子定义全局变量。

#pragma data_seg( "MySec" )
extern int exitflag=1; 
#pragma data_seg()

------解决方案--------------------
http://topic.csdn.net/u/20120811/08/398b53ac-69d6-4a7a-91d3-29aa2b0a51a5.html
看看这个。