[out]BSTR为什么不对? 要[out]BSTR*才能通过编译。
ActiveX 函数参数 [in]BSTR 到client就变lpcstr [out]BSTR*就不边为什么?
谢谢

解决方案 »

  1.   

    [out]属性的参数要求COM分配内存,client去释放内存!
    [in]属性的参数要求client分配内存,client去释放内存!
      

  2.   

    楼上能不能跟我讲讲
    [out]BSTR为什么不对? 要[out]BSTR*才能通过编译。?
      

  3.   

    BSTR实际上是指针(可以看.h文件中定义的BSTR)。因此,如果不是BSTR*,显然不能返回在被调函数中分配的BSTR的值。
    参考以下代码:void rtvstr(char* p)
    {
        p = new char(30);
        strcpy(p, "1234");
    }void main()
    {
       char* p;
       rtvstr(p);
       printf("%s", p);
    }能得到正确结果吗?
      

  4.   

    一般作为输出的属性应该是指针形的。所以[out]BSTR不对,而[out]BSTR*才是对的。
      

  5.   

    这是COM接口方法的参数方向属性问题。
    1、当对象和客户在同一环境中时,它们拥有共用一个堆栈帧,也就是客户进行COM对象接口调用时,要提供[out]参数的地址,这样被调用的对象方法才能写入得到的结果数据,返回给客户;
    2、当它们处于不同的执行环境中时,需要截取器进行方法及其参数的传递,所传递的参数是那些方向性为[in]的参数。这些参数到达存根后,存根负责创建一个堆栈帧,并用传递来的[in]参数值进行初始化,调用对象的方法,运行,得到结果,放回到[out]参数的地址中,再由存根经列集,特殊管道传输会代理,代理散集,将结果放回到客户提供的[out]参数的地址空间中,于是客户得到结果。所以无论那种情况,都需要提供[out]参数的地址,即指针的指针。