杂乱无章_c++ 定义接口 [out,retval] 什么意思?

提问:现在已用C++写了一个COM组件给C#(winfrom)调用,COM组件中的函数返回hresult类型值的方法或者是函数ConnectMail()。但C#调用ConnectMail方法时,显示返回值类型为void。这是什么原因啊,C++中的确返回了Hresult类型,为什么C#中显示没有返回的void。C#怎么才能识别返回值啊?----------如果要修改C++或C#,怎么改?
 
Answer:
com组件的HResult类型返回值是专门供C++语言调用的,用来检查com调用结果是否正确。
而其它语言是不能直接用到这个返回值的。
com组件被VB、C#调用时,其返回值不再是com组件本身的HResult返回值,而com函数接口中定义的某个具有Retval属性的out型传回参数。
明白了否?比如在com里本身是HResult Add(int x,int y,int* Z); 在C++里,HResult是函数返回值 ,而Z是才是函数计算结果的传回值。而被C#调用时,Z就成了ref或out型的传回参数,而函数返回值类型就成了void类型(不再是C++的HResult)了,这样其实已经可以达到计算目的。但你非要想在C#里把Z作为返回值得到而不是通过传回参数得到,就在com组件定义时在接口定义idl文件里,在Z参数前加个[Retval],表示Z参数在C#、VB里作为返回值而不是传回参数,而且能够具有[Retval]属性的参数有且只有一个,且是指针类型。
 
 
提问:哪里有COM ATL 的视频教程?
Answer: 我正在学习com,没有找到视频教程,但是有些不错的网页教程:
1、
http://www.vckbase.com/document/listdoc.asp?sclsid=1701 ,左边一栏点击排行中《COM编程入门》有两部分,或者在其他地方也可以找到转载。这篇文章可以让你对com有一个基本认识
2、之后再看看另一篇《com技术初探》也算是个补充,看完这两篇可以说再看相关的书籍会轻松很多
之后我推荐看《com技术内幕》,这本书深入浅出,短小精悍,非常适合初学者入门。然后是《COM本质论》,再就是《深入解析ATL》。

要求基础:精通C++,对MFC和win32编程有一点了解,知道如何创建及使用dll。

我本也想看视频能快一些,但确实不好找,而且我发现看书也很快,比如《com技术内幕》最慢也可以一周内看完,用不了多少时间。希望对你有所帮助
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值