本帖最后由 dawei_sun 于 2010-12-25 15:42:53 编辑

解决方案 »

  1.   

    你可以把代码发过来给我,我看看为什么不行,帮你补一下
    [email protected]
      

  2.   

    进程外的组件如果是使用纯粹的C++编写的话,和进程内的很多特性不一样的。
    因为不同进程是不能共享地址的,所以必须委托操作系统来进行它们之间的互动,
    这个互动就需要使用到代理和存根dll,COM里面还有个套间的概念,不同套间的
    接口使用需要封送操作的。
      

  3.   

    使用纯粹C++编写进程外的COM组件需要编写很多代码的。建议不要怎么做了,
    不过有个方法可以减少你的麻烦,可以使用idl编写脚本,然后使用idl的编译
    器,会自动编译出代理和存根的代码。包括接口声明代码。不过编译出来的代码
    可读性很差。
      

  4.   

    如果我没有写存根和代理什么的?那COM库不会使用默认的吗?
    我看ATL生成的进程外COM,它也没有相应的存根和代码DLL呀,那它就是可以正常。
    不过我通过QueryInterface发现,它的接口实现了IMarshal接口,按照书上说,这个接口如果不实现,COM库也会有默认的实现呀我实在是搞不明白了
      

  5.   

    如果用户量很大,进程外com尽量避免使用,创建进程的时候,容易被杀毒软件拦截,可能会起不来(类似360等弱智的安全软件,真的是不分青红皂白就拦截了,他不知道是不是病毒,就让用户选择,用户更不知道啊,知道的用360吗!)。
      

  6.   

    谢谢,但是我现在就想知道如何用纯C++写一个进程外的COM。
      

  7.   

    谢谢,但是我现在就想知道如何用纯C++写一个进程外的COM。
      

  8.   

    跨进程处理参数是需要代理的,没有代理是没有办法实现的。
    简单的产生代理的代码可以通过使用IDL编写接口然后IDL
    编译机器编译自动生成代理代码。
      

  9.   

    我也在学COM。
    楼主看我最近的几个帖子。进程外组件需要注册 proxy/stub dll的,楼主是不是没注册这步。
    返回的E_NOINTERFACE其实不是你定义的Interface, 可能是跨进程通信时的IMarshal什么的的。