none
在自动化项目中,如何设置Dllmain函数的实例句柄 RRS feed

  • 问题

  • 我想依照网上的一个教程,来做一个鼠标钩子。按照教程里面的步骤,先建立了一个MFC DLL项目,类型为共享MFC dLL的类型,附加功能上点选自动化。然后是创建一个头文件,在其中建立钩子类(教程比较老是VC5的版本,没有现成的钩子类)。然后在源文件的顶部包含我创建的头文件,在源文件顶部加入全局共享数据变量,在DEF文件中定义段属性。以上都正常,但是下面教程上说要在源文件的DLLMain函数中加入保存DLL实例句柄的语句“glhinstance=hinstance”,但是我并没有在源文件中找到DLLMain的相关语句。我在网上查了一下,尝试自己写DLLMAIN函数如下 

    static AFX_EXTENSION_MODULE KSHooK001DLL;
    extern "C" int APIENTRY
    BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {if (dwReason == DLL_PROCESS_ATTACH)
    TRACE0("MOUSEHOOK.DLL Initializing!/n");
    if (!AfxInitExtensionModule(KSHooK001DLL, hInstance))
    return 0;
    new CDynLinkLibrary(KSHooK001DLL);
    glhInstance=hInstance;
    };

    但是编译错误 如下
    1 IntelliSense: 变量 "BOOL" 不是类型名
    2 IntelliSense: 声明与 "BOOL CKSHook001App::InitInstance()" (已声明 所在行数: 68) 不兼容
    3 IntelliSense: 应输入“;”

    请问正确的代码要怎样写,是否自动化的MFC DLL项目系统已经自动设置了DLLMAIN函数,如果是,请问如何保存DLLMAIN函数的实例句柄呢? 

    http://wenku.baidu.com/view/af044fa5284ac850ad0242c2.html 这是那个教程资料的地址

    谢谢

    2013年4月8日 10:09

答案

  • AfxInitExtensionModule只适用于MFC扩展DLL。MFC扩展DLL的项目向导会自动创建DLLMain,如果你确定要编写一个MFC扩展DLL而不是常规DLL,那么你选错了项目向导。"BOOL" 不是类型名这个错误说明你创建项目的时候没有选择面向Windows的子系统,BOOL是Windows SDK定义的类型。

    MFC常规DLL将DLLmain封装到CWinApp里面去了,不需要DllMain。鼠标钩子没有注入到每个进程,不需要写DLL来达到全局效果。



    Visual C++ MVP

    • 已标记为答案 wjsta 2013年4月9日 3:39
    2013年4月8日 14:28
    版主

全部回复

  • AfxInitExtensionModule只适用于MFC扩展DLL。MFC扩展DLL的项目向导会自动创建DLLMain,如果你确定要编写一个MFC扩展DLL而不是常规DLL,那么你选错了项目向导。"BOOL" 不是类型名这个错误说明你创建项目的时候没有选择面向Windows的子系统,BOOL是Windows SDK定义的类型。

    MFC常规DLL将DLLmain封装到CWinApp里面去了,不需要DllMain。鼠标钩子没有注入到每个进程,不需要写DLL来达到全局效果。



    Visual C++ MVP

    • 已标记为答案 wjsta 2013年4月9日 3:39
    2013年4月8日 14:28
    版主
  •  DllMain的hInstance不就是句柄么

    新浪微博http://weibo.com/xianglitian,欢迎围观

    2013年4月9日 2:43