以前一个问题,后来自己解决了,但不知道为什么,再来问问
请参看我很久以前发的一个帖子
http://community.csdn.net/Expert/TopicView.asp?id=4497578后来查出来是我接口上使用了HWND参数所致,
于是我得出一个结论,接口上有HWND参数,就不能跨进程传递这个接口了,
问题虽然解决了,但我不知道为什么?是Bug,还是微软故意要这样,愿闻剖析性分析。

解决方案 »

  1.   

    HWND 在进程间传递获得的值是不同的。
      

  2.   

    你可以做一个实验重现这个现象,创建一个atl exe com工程,随便加个组件类,再创建一个调用它的客户工程,在那个组件类上加一个类似于这样的方法 HRESULT foo(HWND val); 这个组件类将无法被客户程序CreateInstance,返回的错误值就是那个0x80020008不正确的变量类型错误
      

  3.   

    这是跨套间接口列集(interface marshal)所导致的。你的接口是双向接口或者是自动化兼容的吧,这样的接口如果不使用自己的接口列集器(interface marshaller),而是使用COM默认的接口列集器,那么COM会通过类型库查看此接口的方法和参数,如果发现与自动化不兼容的参数类型,则不予支持,创建组件便会失败。看一下《COM技术内幕》关于marshalling的内容吧。
      

  4.   

    HWND换成long就行了,搞的那复杂。
      

  5.   

    可以传递hwnd类型
    但是在宿端不要再把它转成指针,
    否则出错!
      

  6.   

    应该可以的啊,COM里接收一个HWND后,再往这个HWND发送消息,程序是可以收到的