Writing Self-Clean Code (0x00) - Preface

September 1, 2011 | Category:编程杂谈 | Psot By matrix | No Comments

最近一段时间的工作内容差不多都是在定位产品的ActiveX 控件的崩溃问题。其实现在觉得要写一个稳定的ActiveX真的不是那么容易,至少比写一个稳定的应用程序要关注更多的东西。其实单看Adobe 的 Flash 控件隔三岔五的就爆出一些漏洞,就知道了。

其实个人觉得MSDN 上的文章: Writing Stable Browser Extensions 基本上对于开发ActiveX 或是 BHO 都是很有参考价值的。

就问题论问题,我们的ActiveX 崩溃起初发生在关闭 IE 的时候。原因比较简单:OCX控件在运行是会创建线程,线程回去去访问OCX的全局变量,但是当OCX卸载的时候,没有去把线程停止掉。于是内存访问非法。究其设计缘由:没有考虑业务的清理工作。还有一个类似的错误是OCX的代码里面有动态LoadLibrary加载了Dll,但是最后OCX卸载的时候,也没有FreeLibrary,于是再次加载OCX运行的时候依赖的Dll 已经被加载了,部分变量状态不正确。

上面的原因差不多就是我要写这个系列文章的初衷。平时设计、编码的时候大多把注意力聚焦在业务上了,往往忽略一些基础的东西,比如:代码的运行环境。

当前暂无评论 »

添加新评论 »