全局对象的构造函数发生在main之前, 如果是DLL, 也同样发生在DllMain之前, 这一点就要求这样的类的构造函数中什么东西可用什么不可用要有特别的小心. 如果依赖于其它的一些在main/DllMain中初始化的内容, 就会出现相应的变量未被正确初始化就在该构造函数中被使用.
我的bug实录: 在DllMain中保存下当前DLL的hModule句柄, 在同一个DLL的其它代码中需要通过 GetModuleFileName来得到当前DLL的路径.
由于是在DllMain中已保存一份全局的hModule的copy, 所以整个代码中都假设该变量一定被正确初始化了, 一直到写一个类的构造函数中(这个类有一个实例是全局变量), 才发现这一切都发生在DllMain之前.
阅读(1662) | 评论(0) | 转发(0) |