zoukankan      html  css  js  c++  java
  • COM本质论学习笔记一接口

    1、一般通用的FACILITY_NULL HRESULT如下

    S_OK:一般操作,成功执行

    S_FALSE:成功地返回逻辑错误

    E_FAIL:一般性失败

    E_NOTIMPL:方法没有实现

    E_UNEXPECTED:在不准确的时间调用了方法

    2、HRESULT Method2([in] short arg1, [out, retval] short *parg2);

    retval属性的含义是,相关联的物理方法参数实际上是操作的逻辑结果,在支持retval的环境中,该参数应该被映射为操作的结果。

    3、[ local, object, uuid(00000000-0000-0000-c000-00000000032) ]

         interface IUnknow {

      HRESULT QueryInterface([in] REFIID riid, [out] void **ppv);

      ULONG AddRef(void);    //此方法用于通知对象“一个接口指针已经被复制了”

      ULONG Release(void);   //此方法用于通知对象“一个接口指针已经被销毁”

      }

      [local]属性禁止为该接口产生网络代码。

    4、GUID的实际定义 

      const IId IID_ICalculator =

        { oxBDA4A270, 0xA1BA, OX11D0, { 0x8C, 0x2C, 0x00, 0X80, 0xC7, 0x25, 0xBA } };

    5、COM禁止多种接口继承。

    6、1调用AddRef方法的情形

        A1.当把一个非空接口指针写到局部变量中时。

        A2.当被调用方把一个非空接口指针写到方法或者函数的[out]或者[in,out]参数中时

        A3.当被调用方返回一个非空接口指针作为函数的实际结果时。

        A4.当把一个非空接口指针写到对象的一个数据成员中时。

      2调用Release方法的情形:p44(未完...)

       R1.在改写一个非空局部变量护着数据成员之前。

       R2.在离开非空局部变量的作用域之前。

       R3.当被调用方要改写方法或者函数的[in,out]参数,并且参数的初始值为非空时注意,[out]参数往往被假定“输入时为空值”,所以被调用方法永远也不必释放[out]参数。

       R4.在改写一个对象的非空数据成员之前。

       R5.在离开一个对象的析构函数之前,并且这时还有一个非空接口指针作为数据成员。

       S1.当调用方把一个非空接口指针通过[in]参数传递给一个函数或者方法时,既不需要AddRef,也不需要调用Release,因为在调用堆栈中,临时变量的生命周期只是“用于初始化形式参数”的表达石的生命周期的一个子集。

    7.HRESULT QueryInterface( [in] REFIID riid, [out] void *ppv);

      第一个参数riid是被请求的接口实质名字。第二个参数ppv指向一个接口指针变量,当函数成功返回时,它包含客户所请求的接口指针。

    8.所有的COM接口都必须被定义在IDL中。

  • 相关阅读:
    udev 禁止某些驱动自动加载
    AT91SAM9XEK ramdisk 启动笔记
    MTD 工具使用
    kmp问题
    野指针 空指针 通用指针
    manacher算法实现
    manacher算法
    strcpy和strlen
    冒泡排序
    C++的重载(overload)与重写(override
  • 原文地址:https://www.cnblogs.com/linlf03/p/2095456.html
Copyright © 2011-2022 走看看