我建议你干脆在公共数据段放一个MOUSEHOOKSTRUCT结构,然后在钩子函数中将结构复制,肯定没问题。在消息中传指针的话还要传进程句柄,然后用ReadProcessMemory还有可能,不过那样太麻烦。象你的程序中,指针指向的是不同进程的内存,肯定不行。不知你的导出函数是怎样写的。我今天是回了邮件才见到你的帖子的,还有问题邮件联系吧。

解决方案 »

  1.   

    现在,在公共数据段中已经有了MOUSEHOOKSTRUCT结构,在钩子函数中,我把得到的MOUSEHOOKSTRUCT结构存入公共数据段中,然后再发消息到主程序,主程序去公共数据段中区结构,但发现结构中的数据未更新。看上去好像不同的进程使用不同的公共数据段似的。
      

  2.   

    哥们!如果上面的代码是你所说的用什么"公用数据段的代码的话",那么你有一个很明显的错误。MouseEvt = *((MOUSEHOOKSTRUCT*)lParam);这条语句有错!你想一想,你其实并没有将数据拷到你的公用数据段中。我也不知道这句话的执行结果是什么。你应该用如下的语句:memcpy(&MouseEvt, lParam, sizeof(MOUSEHOOKSTRUCT));或者是类似的语句。你可以先做一个测试程序试试两条语句的结果。肯定是这里的原因的。
      

  3.   

    我已经找到错误了。在定义公共数据段时,应该对每个数据变量赋初值,结构也不例外。所以要对
        “MOUSEHOOKSTRUCT MouseEvt;”赋初值。至于那个导出函数没有错,原因是主程序调用的是自己的Dll,他们在同一个进程中,所以可以传指针。
        十分感谢。
      

  4.   

    我已经找到错误了。在定义公共数据段时,应该对每个数据变量赋初值,结构也不例外。所以要对
        “MOUSEHOOKSTRUCT MouseEvt;”赋初值。
        十分感谢。