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. 利用tcpdump抓取mysql sql语句

    这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入. 脚本不是很长,但是效果很好. #!/bin/bash #this script us ...

  2. 在 SUSE 11 sp2 上安装 freeradius

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. Covarience And ContraVariance

    using System; using System.Collections.Generic; using System.IO; namespace CovarientAndContraVarient ...

  4. C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)

    这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项 ...

  5. delphi array应用 DayOfWeek星期几判断

    //array应用 DayOfWeek星期几判断 procedure TForm1.Button1Click(Sender: TObject);var    days:array[1..7] of s ...

  6. spring mvc --自己定义converse

    在MVC中我们能够非常轻松的依据项目需求进行必要的信息转换,如设置默认的日期格式,自己定义String类型的格式等等... 配置中我们须要自己定义converseService: <bean i ...

  7. MediaPlayer开发全解析

    本文介绍MediaPlayer的使用.MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用Med ...

  8. Android下将图片载入到内存中

    Android的系统的标准默认每一个应用程序分配的内存是16M.所以来说是很宝贵的,在创建应用的时候要尽可能的去节省内存,可是在载入一些大的文件的时候,比方图片是相当耗内存的,一个1.3M的图片,分辨 ...

  9. 循环语句until和while

    一.until语句的基本格式 until 条件测试 do 语句块 done 只要条件测试语句未成功结束,则执行语句块.(如果一开始条件测试语句就成功退出,那么一次也不执行语句块.这里跟C语言中的do. ...

  10. 更改gps.conf来加快GPS搜星速度

    国内NTP ServerNTP全称是Network Time Protocol,是用来让计算机之间实现时间同步的协议,而发布这种校对时间的服务器,就是NTP Server!一般来说客户端与服务器之间的 ...