| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 559 人关注过本帖
标题:【求助】为什么这个dll可以在到达入口点之前就能跑起来了?
只看楼主 加入收藏
ilovelose
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
【求助】为什么这个dll可以在到达入口点之前就能跑起来了?
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
//首次加载DLL时从此处执行
//当然,这里你可以开一个线程
hInstance=(HINSTANCE)hModule;
MessageBox(NULL,"Test!","[DLL加载]参数测试!",MB_OK);
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
//做一些善后工作,如释放内存
break;
case DLL_PROCESS_DETACH:
//善后
break;
}
return TRUE;
}
一直都看不懂,帮忙解答下好吗?谢谢~~
搜索更多相关主题的帖子: 测试 工作 return 
2011-11-25 21:51
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
DllMain就有点像程序的main函数
不过有点不同就是,这个DllMain在程序运行时候可能进入多次。如下说明
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        break;  // 第一次加载dll时候 会调用到DllMain,而且会跑到这个分支
        case DLL_THREAD_ATTACH:
        break;  // dll加载后,每次线程创建的时候会,会会调用到DllMain, 跑到这个分支
        case DLL_THREAD_DETACH:
        break; // dll加载后,每次线程退出的时候会,会调用到DllMain, 跑到这个分支
        case DLL_PROCESS_DETACH:
        break; // 卸载dll时候,会进入该函数并且跑到在这个分支。
        }
    return TRUE;
}

也就是说DllMain 在Dll加载后,首次加载会调用DllMain,ul_reason_for_call为DLL_PROCESS_ATTACH,线程创建时候也会进入,ul_reason_for_call为DLL_THREAD_ATTACH。其他也就是相应的标示了。

在编写dll的时候就可以在不同的case中做相关的事情就行了。

建议去看看windows内核编程那本书,如果学windows编程 ,那本书不错
收到的鲜花
  • ilovelose2011-11-26 07:45 送鲜花  3朵   附言:知道了,谢谢,不过我的分数限制为15分,没 ...

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2011-11-25 22:49
快速回复:【求助】为什么这个dll可以在到达入口点之前就能跑起来了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051079 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved