VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 648|回复: 2

[求助] WinDll和MFCDll有什么不同?

[复制链接]
35_avatar_middle
online_vip 发表于 2016-5-10 23:39:59 | 显示全部楼层 |阅读模式
3驿站币
用MFC建立的DLL
BOOL ??????App::InitInstance()
{
        CWinApp::InitInstance();

        return TRUE;
}

用Win建立的DLL
BOOL APIENTRY DllMain(
        HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
        )
{
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
                break;
        case DLL_PROCESS_DETACH:
                break;
        case DLL_THREAD_ATTACH:
                break;
        case DLL_THREAD_DETACH:
                break;
        }
        return TRUE;
}

对比一下,Win建立的DLL有三个参数,但是MFC建立的DLL没有。

所以请问:如果用MFC建立DLL的话,怎么也能有三参数传入进来?因为有时候,这三个参数很有用的。





上一篇:下面代码buffer1是指向什么地方呀?
下一篇:关于调用SetScrollSizes时出现错误
51_avatar_middle
online_admins 发表于 2016-5-11 14:30:50 | 显示全部楼层
往VC的MFC DLL添加DLLMain接口  

很不幸,MFC的Regular DLL把DLLMain接口进行了重新封装,无法直接对DLL_PROCESS_ATTACH、DLL_PROCESS_DETACH、DLL_THREAD_ATTACH、DLL_THREAD_DETACH四种情况添加自定义的代码,但是通过查阅MSDN,可以知道MFC DLL类是继承于CWinApp,其InitInstance与ExitInstance接口分别对应着DLL_PROCESS_ATTACH与DLL_PROCESS_DETACH,对于进程的加载与卸载,可以直接在InitInstance或ExitInstance接口中添加自定义代码。

       但是对于线程的加载(DLL_THREAD_ATTACH)与退出(DLL_THREAD_DETACH)还是无法处理啊。如果自定义程序涉及TLS(线程本地存储),需要在线程加载或退出时自动进行一些操作,该怎么办呢?好在天无绝人之路,在VS安装目录\VC\atlmfc\src\mfc(这是VS2010的路径,其它版本应该也是差不多)目录中,有一个dllmodul.cpp文件,将该文件添加到需要的工程中,找到该文件的InternalDllMain函数,这就是我们所要找的DLLMain。
59_avatar_middle
在线会员 发表于 2016-5-11 23:32:31 | 显示全部楼层
楼上正解 嘿嘿
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-23 22:07

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表