DllMain函数不特殊

摘要:毕竟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定义为全局变量就可以了。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值