如果可以分配,是任何类型都可以么?
  清举个例子看看。

解决方案 »

  1.   

    可以.out类型需要在组件方分配内存.例子msdn上有.
      

  2.   

    当然可以。只要你在文档中说明,需要客户去释放就可以了。
    BSTR* pVal
    不就是在组件方分配的么?
      

  3.   

    当然可以
    out类型的参数就是要组件分配内存,调用方销毁
    如:HRESULT GetName([out]BSTR* pbstrName);
    组件实现:
    {
      *pbstrName=SysAllocString(L"liu");
    }
    客户调用:
    BSTR bstrName;
    GetName(&bstrName);
    。。
    SysFreeString(bstrName);
      

  4.   

    但是我传递了一个long类型的数据,却传递不出来,不知道怎么回事。
      代码如下:
      HRESULT GetName([out]long* pbstrName);
    组件实现:
    {
      pbstrName = new long;
      *pbstrName = 10
    }
    客户调用:
    long*  lName;
    GetName(lName);
    。。
    delete lName;
     
       问:是否只有BSTR类型可以在组件方分配内存呢?别的类型是否也可以,可以的有那些类型呢?
      
      

  5.   

    楼上代码应该写为  HRESULT GetName([out]long* pbstrName);
    组件实现:
    {
      //pbstrName = new long;
      *pbstrName = 10
    }
    客户调用:
    long  lName;
    GetName(&lName);
    //delete lName;BSTR本质上是一个指针
    long的本质上不是指针
      

  6.   

    哦,那么说,out类型的参数,除了bstr类型外,基本类型(int ,long ,float....),内存空间都是只能在客户程序中分配了。
      

  7.   

    可以在组件中分配,如 :
     HRESULT Method( [out]long* pMemLen , [out,size_is( , *pMemLen )]long **ppValRet );
    组件中使用 CoTaskMemAlloc 为 ppValRet 分配内存,客户端用 CoTaskMemFree 释放分配的内存。
      

  8.   

    即使在组件中分配的,占用的还是客户的内存,dll类型组件总是需要调用者的通常应该是谁分配的内存谁负责释放。。