如何在全局钩子中调用外部函数
小弟写了个USB的全局钩子,希望插拔USB设备时,能执行一些(加载钩子程序中的)外部函数,原本是想通过传递函数指针实现函数调用,但一调用外部函数,explorer进程就出错,错误信息如下.请问出错的原因,另外还有什么办法能实现在全局钩子中调用外部函数.
explorer错误信息:
AppName: explorer.exe AppVer: 6.0.2900.2180 ModName: unknown
ModVer: 0.0.0.0 Offset: 0041111d
钩子部分代码:
case DBT_DEVNODES_CHANGED: //设备只能触发这个消息
if(fp)
{
char strGuid[37];
guidToString(deviceGUID,TRUE,strGuid,sizeof(strGuid));
if(OpenUsb(&deviceGUID))
{
//插入设备
if(!openFlag)
{
//插入设备
openFlag = DEVICE_IN;
if(deviceArrival)
{
fprintf(fp, "\n deviceArrival = %x",deviceArrival );//此处打印出的函数地址和控制台中传入的函数ttxxpp()地址相同
deviceArrival();
}
fprintf(fp, "\n USB OPEN SUCC!\n openFlag = %d",openFlag);
}
}
//传递外部函数指针
void registerFunction(void (*fncname1)(), void (*fncname2)())
{
deviceArrival = fncname1;
deviceMove = fncname2;
}
钩子头文件中的声明如下:
extern "C" void DECLDIR registerFunction(void (*fncname1)(), void (*fncname2)());
调试钩子的控制台中的传递函数指针如下:
void ttxxpp();
void mulFunc();
typedef void (*regFunction)(void (*fncname1)(), void (*fncname2)());
regFunction tsRgeFunc = NULL;
tsRgeFunc = (regFunction)GetProcAddress(hDll,"registerFunction");
tsRgeFunc(ttxxpp,mulFunc);
void ttxxpp()
{
int s = 5+8;
}
void mulFunc()
{
int s = 5*8;
} --------------------编程问答-------------------- 沙发,帮你顶 --------------------编程问答-------------------- 帮你顶!!!!!
补充:.NET技术 , VC.NET