书上说:COM的接口,如果有指针参数,则代理模块不但拷贝指针值,也拷贝指针指向的内存。我觉得这个代理模块挺变态的!现在我需要做一个组件,这个组件从图像文件里读取图像数据,并把数据送给客户程序。如果是普通程序,那么可以是用户申请一块内存,将指针提供给图像读取程序,图像读取程序从文件里读取数据,处理后放到用户提供的缓冲区里。但是在COM里,总不能让代理模块几兆几兆的拷贝数据啊!效率多低啊。怎么办?怎么办?哦对,DirectDRAW的图面对象接口,不是有“Lock”方法可以返回内存指针吗?它怎么就可以?难道我不得不自己写代理/桩基模块?我不想吐血!另:我做的只是本地进程内组件。

解决方案 »

  1.   

    cxghj(网事如风) ,再麻烦请教两句:我用ATL做的进程内组件,我想,如果我选择“Single”线程模型,情况可能应该如你所说(但是书上并没这么说,估计是书写的不全面)。但是假如我选择“Apartment”模型,数据是不是真的要靠消息循环来传递?那么在这种情况下,内存指针是否还能放心传递?谢谢!很快会给分。
      

  2.   

    如果选择“Apartment”模型,那么在线程1中创建的实例,如果在线程2中使用,那么就会产生代理。