在[in], [out], [in, out]这三种情况下SAFEARRAY数组的释放是由谁完成的?

解决方案 »

  1.   

    “谁申请,谁释放”,说得好听,但有时根本无法实现,例如[out]时。
      

  2.   

    [in], [out], [in, out]
    好像只是给程序员看的吧
      

  3.   

    COM中规定,如果是用户得到控件分配的内存,则需要用户自己来释放。比如在VB中,我们可以直接给控件一个变量让他填充一个数组;而在控件内部会去分配一个Safearray然后包装成Variant传回去,使用完毕之后,VB回去释放。“谁分配,谁释放”这个是对的,但是在COM中需要转换一下思维了。
      

  4.   

    好像没有回答问题,对于[in]当然是用户分配并且释放;对于[out]则由控件分配,并且由用户释放;对于[in,out],则需要进行判断,如果用户的数组不是空的,则表示用户只需要这么多数据,如果空间必须要大一些,则应该返回错误让用户知道;如果用户的数组是空的,则由控件分配,并且将其返回给用户,并由用户释放。
      

  5.   

    COM是在分布式环境运行的,接口的调用是通过代理进行的,不是服务器和客户的直接调用。因而内存的分配和释放是服务器和代理及代理与客户之间的事情。这是需要明确定义操作行为的。我所需要知道的就是这一定义的细节。不过,通过实验我初部有了些头绪。