COM 参数有in, out ,retval

来源:http://blog.sina.com.cn/s/blog_472a9f0c01017uer.html

In 输入参数,它的值不被返回  
  Out 输出参数,必须是一个成员指针,将返回结果  
  RetVal 返回值,返回的值不能显示到用户向导中

就Out,RetVal,都是返回值,具体区别在哪?

  • RetVal只是Out的一种特殊情况,对于wrapper class在碰到RetVal时,会将其作为一个返回值来处理,对调用方就可以直接拿它当函数的返回值,而不需要再用一个传出参数来接收返回的信息。
  • 在一个过程或函数当中RetVal,最多只能有一个。但是Out/in可以有多个(当然也不是无限的)。
  • [out,retval]表示参数方向是输出,同时可以作为函数运算结果的返回值。一个函数中,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位置。
  • [in]类型表明参数是一个输入参数,所以这个参数不会向外界返回结果
    [out]类型表明参数是个输出参数,所以这个参数会向外界返回结果,而且传入参数时,可以将变量设置为NULL
    [out,retval]类型表明参数是个输出参数,且会返回类中数据成员的值
  • 那么从[out],[retval]类型的参数可以获取参数改变后的值,则函数的执行结果从函数的返回类型HRESULT来获得

使用ATL创建COM组件时,需要标明参数的类型为[in]、[out]或者[out,retval]。
通过Init方法返回一个BOOL型变量,
在IDL中的代码是:
HRESULT Init([out,retval]BOOL* result);
函数体为:
STDMETHODIMP CBrowserAD::Init(BOOL *result)
{
...
*result = true
return S_OK;
}
在COM客户端,这样使用的:
首先定义 BOOL* t;

得到Init函数中的返回值*result:

用2的方法,类型转换一下就可以了:

*t = (BOOL)m_BrowserAD->Init();

COM 参数有in, out ,retval的更多相关文章

  1. C#传递参数到线程的n个方法

    [转]http://kb.cnblogs.com/a/888688/ 本片文章的议题是有关于传递参数到线程的几种方法. 首先我们要知道什么是线程,什么时候要用到线程,如何去使用线程,如何更好的利用线程 ...

  2. html网页如何传递接收地址参数?

    实现html页面的参数传递 方法一: 下面是javascrīpt的一种实现方法, 这个函数是通过window.location.href中的分割符获得各个参数. 有了这个函数,就可以在页面之间传递参数 ...

  3. 父窗口和iframe子窗口之间相互传递参数和调用函数或方法

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  4. 向HTML页面传入参数

    这次是想将参数传入HTML页面,通过js获取参数信息,动态生成HTML页面内容: 方法一: <script> function GetArgsFromHref(sHref, sArgNam ...

  5. linux下可执行程序的装载和启动

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 1.c文件的编译 图中显示了c ...

  6. doxygen的使用(二)给代码添加javadoc风格的注释

    原创文章,欢迎阅读,禁止转载.本文记一下javadoc风格注释的写法,这些特殊格式的注释称作标签.按照这种规范写的注释才能生成到文档中. 块注释的写法 /** * @brief 这个块注释 * dox ...

  7. [php-src]窥探Php内核中的变量

    内容均以php-5.6.14为例. 在看各种组合数据类型之前,有必要先熟悉下 Zend/zend_types.h 里面的自定义数据类型. #ifndef ZEND_TYPES_H // 防止多次 in ...

  8. Linux内核如何装载和启动一个可执行程序

    exec 本节我们分析exec系统调用的执行过程. exec一般和fork调用,常规用法是fork出一个子进程,然后在子进程中执行exec,替换为新的代码. do_exec 跟上次的fork类似,这里 ...

  9. Nginx和Tengine的详细安装图文教程(Linux下)

    简洁安装 安装依赖 yum -y install gcc openssl-devel pcre-devel zlib-devel 编译三步走./configure \ --prefix=/opt/sx ...

随机推荐

  1. 编码规范系列(一):Eclipse Code Templates设置

    从工作开始,经历了几个项目的开发,现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范.俗话说约定优于配置,但是在执行过程中往往发现效 ...

  2. Oracle DataGuard搭建(一)

    第一次搭建oracle dataguard.学oracle很长时间,却没有完整的搭过dg,说起来让人笑.总得有第一次,而且第一次总是很痛苦的. 数据库版本: Oracle Database 11g E ...

  3. SASS优化响应式断点管理

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 原文:<Managing Responsive Breakpoints with Sass> 作者:Hugo Giraude ...

  4. POJ 1743 Musical Theme 后缀数组 最长重复不相交子串

    Musical ThemeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1743 Description ...

  5. c# 自己制作一个简单的项目倒计时器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 调用Dll里面的窗体

    将窗体资源分装到DLL中并且调用 用Delphi生成DLL并封装窗体的示例 调用Dll里面的窗体 DLL文件 library Project2;{ Important note about DLL m ...

  7. 三分钟掌握 JUnit3.0

    曾经公司做过一个.net的项目,在项目开发的过程中.我们採用的是分层的开发方式,大家先在一起讨论接口, 然后讨论完以后,形成文档,然后依照文档进行开发!这样就有一个问题,你必需要保证你的接口是正确的. ...

  8. 前端框架Bootstrap

    前端框架Bootstrap http://www.bootcss.com/ Bootstrap 编码规范 http://codeguide.bootcss.com/

  9. 使用安卓读取sqlite数据库方法记录

    最近要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 如图: 实现过程完全是按照参考文 ...

  10. Linux下的简单好用的计算器bc

    1. 关于bc bc是随意精度计算器语言,通常在linux下当计算器用,简单好用.相当于windows下的计算器. 2. 支持的运算符 主要的数学运算: + 加法 - 减法 * 乘法 / 除法 ^ 指 ...