none
BOOL WINAPI DLLMain如何设置 RRS feed

  • 问题

  • BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);

    {

        HANDLE g_hModule;

        switch(dwReason)

        {

        case DLL_PROCESS_ATTACH:

           cout<<"Dll is attached!"<<endl;

           g_hModule = (HINSTANCE)hModule;

           break;

        case DLL_PROCESS_DETACH:

           cout<<"Dll is detached!"<<endl;

           g_hModule=NULL;

           break;

        }

        return true;

    }

    请问这段代码 里面的  switch case的那些语句是必须的吗?我不太清楚 BOOL WINAPI DLLMain这个函数的如何具体设置,比如就

    BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);

    {

    }

    这样可以吗?

    另外我想给第一个实例句柄参数设置 怎么写?

    是这样BOOL WINAPI DLLMain(xxx=hinstance,DWORD fdwReason, LPVOID lpvReserved);

    还是

    BOOL WINAPI DLLMain(HINSTANCE hinstdll,DWORD fdwReason, LPVOID lpvReserved);

    {

    xxx=hinstance

    }这样? XXX是可以自己取得变量名字吗?

    2013年3月15日 16:53

答案

  • 你好,

    欢迎来到这里。

    如果您的dll需要DllMain入口函数,那这段代码中的switch case 是必须的。不需要的话,整个BOOL WINAPI DLLMain函数都是不需要的。

    另外建议您不要省略另外两个线程选项:DLL_THREAD_ATTACHDLL_THREAD_DETACH。具体参见这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

    没太明白您的第二个需求的意思,这里您第一种写法是语法错误的。第二种,没明白您的意思。如果您想实现方法的话可以另外新建一个cpp文件去在其中写入您的处理过程。

    此致


    Elegentin Xie
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年3月18日 9:41
    版主
  • 你好,

    欢迎回来。

    MFC DLL的入口函数已经封装好,不用自己再写。上面你给出的Win32 Dll下的入口函数定义方式。这个switch语句是整个用于判断dll载入与释放的。

    Glinstancehinstance是自定义的变量。

    此致


    Elegentin Xie
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 wjsta 2013年3月20日 12:39
    • 取消答案标记 wjsta 2013年3月20日 12:39
    • 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37
    2013年3月20日 8:25
    版主

全部回复

  • 你好,

    欢迎来到这里。

    如果您的dll需要DllMain入口函数,那这段代码中的switch case 是必须的。不需要的话,整个BOOL WINAPI DLLMain函数都是不需要的。

    另外建议您不要省略另外两个线程选项:DLL_THREAD_ATTACHDLL_THREAD_DETACH。具体参见这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

    没太明白您的第二个需求的意思,这里您第一种写法是语法错误的。第二种,没明白您的意思。如果您想实现方法的话可以另外新建一个cpp文件去在其中写入您的处理过程。

    此致


    Elegentin Xie
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年3月18日 9:41
    版主
  • 多谢 第一个问题我已经从您这里等到了答案。请问switch case这个要写些什么呢?是这样的我在网络看到一个教程一个全局钩子的。教程里关于设置DllMain函数这里只交代一句”在主文件KSHook.cpp的DLLMain函数中加入保存DLL实例句柄的语句:glhinstance=hinstance;“ 所以我并不知道switch case 是具体怎样设置 您能帮我解答一下吗。另外glhinstance这个是程序员自己取得变量名称是吗?

    这个网址是教程的地址百度文库的

    http://wenku.baidu.com/view/af044fa5284ac850ad0242c2.html

    我第二个需求的意思就是 HINSTANCE hinstdll  这个参数是 句柄参数吧, 我想给他赋值或是定义,  就是这个参数赋值一个变量名,XXX的意思就是我想取得变量名 ,我不知道具体的格式。

    例如:这种BOOL WINAPI DllMain(HINSTANCE myh, DWORD, LPVOID)”格式是正确的吗? 其中 myh是我想取的名字

    还是要把 “HINSTANCE myh” 参数写成HINSTANCE=myh”或“myh=HINSTANCE”,并放在{ }这个过程代码里面?

    另外在VC2012 C++里面建立MFC dll 项目  如果不选空项目的话是不是IDE会自动设置这个DLL的DllMain函数?因为我自己写了一下DllMain函数后,调试 系统提示错误如下:

    错误 1 error LNK2005: _DllMain@12 已经在 KSHook00.obj 中定义 d:\documents\visual studio 2012\Projects\KSHook001\KSHook001\mfcs110ud.lib(dllmodul.obj)

    错误 2 error LNK1169: 找到一个或多个多重定义的符号 D:\Documents\Visual Studio 2012\Projects\KSHook001\Debug\KSHook001.dll 1

    “KSHook001.dll“是我给的项目名称




    2013年3月18日 14:00
  • 你好,

    欢迎回来。

    MFC DLL的入口函数已经封装好,不用自己再写。上面你给出的Win32 Dll下的入口函数定义方式。这个switch语句是整个用于判断dll载入与释放的。

    Glinstancehinstance是自定义的变量。

    此致


    Elegentin Xie
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 wjsta 2013年3月20日 12:39
    • 取消答案标记 wjsta 2013年3月20日 12:39
    • 已标记为答案 Elegentin XieModerator 2013年3月27日 10:37
    2013年3月20日 8:25
    版主