dllmain函数处理四个标识,DLL_PROCESS_ATTACH,DLL_PROCESS_DETACH,DLL_THREAD_ATTACH,DLL_THREAD_DETACH,分别进行一些初始化工作,和清理工作。一般你可以不用。

解决方案 »

  1.   

    一.DllMain()和导出函数并没有什么直接联系,即使你自己不定义,系统也会给你提供一个默认的。你可以像以前那样定义导出函数。
      二.DllMain()是由加载程序帮你调用的。它会分别收到DLL_PROCESS_ATTACH,DLL_PROCESS_DETACH,DLL_THREAD_ATTACH,
    DLL_THREAD_DETACH,分别是DLL被加载时,DLL即将被卸载时,DLL所在进程有新线程产生时和DLL所在进程有线程运行结束时。这些时候系统就会调用你的DllMain,并传递相应的参数,你可以作一些初始化和清除工作。
      

  2.   

    我试了一个最简单的dllmain
    BOOL DLLMAIN(...)
    {    printf("test\n");
        return TRUE;
    }
    并且生成了dll.
    那么按照这位英雄所说,用dllmain生成dll后,如何调用呢?
    因为只生成了dll,所以我用显式调用:loadlibrary和getprocaddress。
    但是出错。得到的句柄好像有效,但是函数地址却是0,不知道为什么?恳请指点
      

  3.   

    第一,函数的正确拼写是bool APIENTRY DllMain(),注意大小写。第二,DllMain()函数不要你显示调用,你要测试的话,可以这样:
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  dwReason, 
                           LPVOID lpReserved
     )
    {
        if(dwReason==DLL_PROCESS_ATTACH)
          MessageBox(NULL,"hello","hi",MB_OK);
        return true;
    }
    这样,在DLL加载的时候就会产生一个消息框。