用vc的atl com wizard生成的com中
variant这个变量是什么意思
hresult这个返回值是什么意思
我如果想返回一个对象,返回值怎么写
在"add property"中返回值类型没有需要的,怎么办另外,在method中可以加返回值吧
如果是这样的话,那么,加属性的目的是什么呢

解决方案 »

  1.   

    不能返回一个对象,但可以返回一个接口。
    1.直接写接口"I#YourName# *"作为返回类型。
    2.先返回IDispatch*或IUnknonw*,客户可以间接获取所需接口。
    3.通过VARIANT返回,参考Platform SDK中Automation。
      

  2.   

    1.直接返回接口类型 [out, retval] I#YourName# **ppValue。
    2.返回IUnknown*或IDispatch*,客户可以间接获得所需接口。
    3.通过VARIANT,var.vt = VT_DISPATCH; var.dispinterface = pValue 返回自动化类型变量。
      

  3.   

    VARIANT 是一个"万能"的数据类型,可以存放很多种类型的数据,通过vt成员指示。很适合于VB和脚本语言的使用,因为没有类型的限制。HRESULT当然是返回值了,用于说明该调用是否成功。你不应该把自己的返回值放在这里,而应该用另一个out参数返回。HRESULT的返回值,有可能是COM底层库返回的,比如根本无法调用你的COM组件。如果要返回一个对象,只能返回一个对象的引用(也就是对象的接口指针,比如IUnknow*接口)。返回前,要对该指针AddRef。调用者使用完后,需要Release.
      

  4.   

    谢谢
      现在有个问题,我用vc写的com(基于ado的),比如有个方法叫openrecordset
    我想让返回值是-recordsetptr类型的这样,我在php中就可以这样调用:
    $obj=new com(a.b);
    $rs=obj->openrecordset;
    $Fields0=$rs->Fields("ID")请问接口参数如何写。
      

  5.   

    不知道有没有一个IRecordset的接口,如果有,那么如下写就可以了HRESULT OpenRecordset([out,retval]IRecordset** ppVal)