我用Invoke(0,IID_NULL,0,
        DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
函数时,其中第一个参数是内部定义的一个类对象,我用以下的方式没有反应
dispparams.rgvarg[i].byref=object;
dispparams.rgvarg[i].vt = VT_PTR;
请教上面的byref和PTR应该改成什么呢,object是一个指针对象

解决方案 »

  1.   

    既然是进行IDispatch调用,就应该使用OLE兼容的类型,不要传递自定义类对象的指针,要使用系统可识别的VT类型,否则系统不知道该如何列集指针参数。
    把你的object的类型也定义成一个接口(在IDL中描述),然后就可以把object转换成系统可识别的IUnknown或IDispatch指针。
      

  2.   

    我定义成一个新的接口了,在IDL中
    //  Event 的主调度接口

    [ uuid(F2653CBE-0A11-441E-97BC-E89029923A16) ]
    dispinterface IEvent
    {
    properties:
    methods:
    }; //  Event 的类信息 [ uuid(5CF7FD58-2C75-461E-81B6-443D62105CAF) ]
    coclass Event
    {
    [default] dispinterface IEvent;
    };
    那我怎么能够把这个组件对象转化成一个IDispatch指针指针呢
      

  3.   

    组件实现了这个接口?只要你的组件是从IDispatch派生的即可,直接把组件指针转换成IDispatch*
      

  4.   

    LZ没有使用接口指针的方式, 用的是纯API调用试试
    dispparams.rgvarg[i].byref=(VARIANT FAR *)object; 不过也注意一下, 参数是反向传递的