当前位置:编程学习 > C#/ASP.NET >>

如何在全局钩子中调用外部函数

小弟写了个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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,