发现BCB6的TComInterface实现有点问题
来源:互联网 发布:excel数据分类汇总ppt 编辑:程序博客网 时间:2024/05/16 12:38
发现BCB6的TComInterface实现有点问题
TComInterface类似于VC的Com指针,赋值时会AddRef,释放时会Release.
例:
IHTMLDocument2 *pDoc=NULL;
cb->Document->QueryInterface(__uuidof(IHTMLDocument2),(void**)&pDoc); //cb是TCppWebBrowser控件
if(pDoc)
{
//...
pDoc->Release();
}
可以改成:
TComInterface <IHTMLDocument2> pDoc(cb->Document);
if(pDoc)
{
//...
}
但是运行它会出现内存读写错误,最后发现utilcls.h 第2991行
template <class I> TComInterface(const DelphiInterface<I>& src)
应改成
template <class I> TComInterface(const DelphiInterface<I>& src) : intf(0)
否则因intf未初始化为0, 它随后调用的if(intf) intf->Release()会出错.
另外还有一疑问,以我的理解此构造函数的代码里应该不用AddRef才对,因为它调用的operator=(const DelphiInterface<I>& src)里使用了QueryInterface.
So 偶把AddRef这行也注释了, 是不是正确不敢说
感言:微软的COM技术简直就是造成内存泄漏的超级凶手,每个人对它的理解都五花八门.
- 发现BCB6的TComInterface实现有点问题
- 安装bcb6出现的问题
- 初学bcb6的一些问题
- 今天发现CSDNBLOG有点问题。
- 记录使用BCB6出现的问题
- BCB6可疑的内存泄露问题
- 发现对java的API有点感悟
- 关于使用BCB6编写Windows服务的问题
- BCB6下SelectDirectory窗口居中问题的解决方案
- 有点问题的代码
- JAVA...窗口的实现,有点问题帮忙指出谢谢!!
- 突然发现有点问题uva673(栈括号匹…
- 发现了有点晚
- 有点惋惜,今天才发现你---知识的天堂
- 小小发现,windows7 和windows vista 的ProgMan 有点不同
- 网页布局技巧(网上发现的,有点用)
- 今天无意间发现的,有点小兴奋。while(next)
- 原生JS和ES6有点冲突的地方发现
- PHP缓存技术介绍!
- 关于PHP操作文件的一些FAQ总结
- 明白了这十个故事,你也就参悟了人生
- 今天开始写文章
- BCB里用MCI实现简单的录音功能(摘录自BCB Demo)
- 发现BCB6的TComInterface实现有点问题
- 红本本
- adapter
- 最新版的fckeditor2.4在php环境下的设置
- 黄山烟云(新浪旧贴)
- sxs.exe病毒手动删除方法
- Componite
- 重要!请注意!宏村的慕尼黑会议!(新浪旧贴)
- 你三十岁的生日,我写文章纪念 (西祠旧贴)