• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 大家来完善一下ATL写COM的不成文规范!!!

大家来完善一下ATL写COM的不成文规范!!!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 大家来完善一下ATL写COM的不成文规范!!!等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 大家来 完善一下 ATL 写 COM 的不成文规范!!!
描述:

1.初始化
CUGXxx:: CUUXxx (): m_pIHttpdown (NULL),...
HRESULT CUGXxx::FinalConstruct(){  }
2.销毁
void CUUXxx::FinalRelease()
{
  if(m_pIHttpdown)
 {
m_pIHttpdown ->Release();
  }
}
3.字符串 处理
  接口参数使用BSTR ,类或函数变量使用 CComBSTR
4. 进入函数的第一步就应该检测指针是否为空。
STDMETHODIMP CUUXxx::Attach(REFIID riid, void **ppv)
{
  ATLASSERT(!IsBadReadPtr(ppv, 4));
  ATLASSERT(!IsBadReadPtr(*ppv, 4));  
  if (IsBadReadPtr(ppv, 4) || IsBadReadPtr(*ppv, 4))
  {
     return E_POINTER;
  }
  。。。
}


解决方案1:

C++有成文的编程规范,可是ATL并没有遵循
ATL遵循的唯一规范是,小小小,更小.只要能把程序的"体积"缩小,他什么什么都愿意做
很多很晦涩的代码把人折磨得半死.
我花了几天地时间才弄明白,ATL怎么把窗口消息调度到他的消息处理器,寒一把
大家讨论了半天好像也没有个所以然,看看大多是ATL文档上希望我们这么做的,还有些就是C++本身的规范
所以我觉得这个讨论意义不大,不成文叫什么规范?
C++有成文的编程规范,ATL的文档中说了他的类的安全的使用方法,有这些就够了

解决方案2:

STDMETHOD(get_Name)(BSTR* pVal)
{
  *pVal = NULL; // getProg must be set NULL frist!!!
  ...
}

解决方案3:

把 BSTR作为参数传递给一个方法时,调用方负责在调用方法之前先调用SysAllocString,然后在方法完成之后调用SysFreeString
HRESULT SetString([in] BSTR bstr);
BSTR bstr = SysAllocString(OLESTR("hello"));
HRESULT hr = SetString(bstr);
SysFreeString(bstr);

解决方案4:

if(m_pIHttpdown)
 {
m_pIHttpdown ->Release();
m_pIHttpdown = NULL;
  }
脑袋发麻了,越来越笨,都不记得还要注意些啥子,想起来再来补充。
楼下的兄弟继续补充哈。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 compilingiserror:fatalerrorC1083紧急求助
  • 2017-06-05 又遇到问题了,牛人帮忙
  • 2017-06-04 activeX?
  • 2017-06-05 如何使用别人编写的动态连接库?
  • 2017-06-04 还是服务问题
  • 2017-06-04 接口继承的问题,救命,在线等待
  • 2017-06-04 EXCEL插件中改写表格内容导致错误,高手请看!!!
  • 2017-06-05 如何向另一应用程序的窗体发消息按某一特定按钮?在线等待。。。
  • 2017-06-04 把控件MicrosfotWinSockControl,当做对象引用,打包安装在别的电脑中,程序运行出错
  • 2017-06-04 ActiveXControl使用问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在win2000server中设置了COM+VB写的测试DLL,导出的msi文件只能在win2000pro中安装,不能安装在XP。为什么?
    • 大家讨论:多画面视频监控的实现
    • 请大侠指点vc利用twain的activex控件为何不能连续扫描??急求!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    • 急死我了!串口读写和多线程的几个问题,千万帮忙阿!菜鸟多谢各位,感激涕零!!
    • 也是第一个DLL的问题!!
    • 一个关于select的问题
    • COM里这个STDMETHODIMP是定义什么的?偶看出现了很多次
    • 几个基础概念
    • ActiveX在网页中的问题0x00000000指令引用的0x00000000内存内存不能为Read要终止程序
    • 如何从DLL中继承一个类notinheritedfromMFC,Project:Win32dynamic-linkLibrary

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有