DllMain函数不特殊

来源:互联网 发布:fc2最新域名网站 编辑:程序博客网 时间:2024/04/30 12:04

摘要:毕竟DllMain只是一个普通函数,它的生命周期不长,如同普通函数一样,在它里面定义的局部变量a函数结束后也结束了,线程中引用的a的地址现在指向一块废弃的内存。

我们创建DLL,免不了要和DllMain函数打交道,初学者也许会觉得这个DllMain函数和我们创建exe程序时的mainWinMain函数一样,跟其他普通函数相比有那么一点特别。其实不然,main函数作为exe程序的入口函数,整个程序从进入它时开始,到退出它时结束,可以说程序的整个生命周期都是在main函数里完成的。DllMain函数就一般的多了,除了在DLL被加载时要运行DllMain这一点特别之处外,这个函数与一般的函数毫无区别。下面以一个我在工作中犯的错误为例,希望读者能更好的理解DllMain

先看正常程序,在exe

 

运行结果如同期待的那样:

再来看看下面这个是用DLL的程序:

 

useDLL.cpp中调用:

 

运行useDLL.exe结果如下:

 

的值错了!为何如此,道理很简单,毕竟DllMain只是一个普通函数,它的生命周期不长,如同普通函数一样,在它里面定义的局部变量a函数结束后也结束了,线程中引用的a的地址现在指向一块废弃的内存,所以a值就变得没有意义了。

如果想要是a的值正确,只要在DLL中将a定义为全局变量就可以了。

这么个低级的错误,花了我一个多小时才找到原因,现记录下来,提醒自己。