BSTR cancan= CComBSTR("Dvvccc");
    VARIANT  fs;
int   fh;
    USES_CONVERSION;
char* lpszText1 =W2A(cancan);
     __asm{   
mov      eax,lpszText1
push  eax
        call     dword   ptr[dispIdMember]
pop      eax
mov      fh,eax
leave
ret      4
}   
  *fs = fh;

解决方案 »

  1.   

    call     dword   ptr[dispIdMember]  返回的是一个 VARIANT  int指针1,我没获得到这个指针 fh,当调用后 程序非法关闭
    2,我需要将这个 int 指针 转换成 VARIANT  fs
      

  2.   

    typedef VARIANT (__cdecl CallInFunc)(char ff);这样调用 ,可以正常返回VARIANT 数据,但函数的参数 缺接收不到
    好郁闷啊,一个头能用,一个尾能用。
      

  3.   

    virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke( /* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid, /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo, /* [out] */ UINT *puArgErr){ 
    如何判断有无参数,并获得第一个参数bstrval
    BSTR cancan= pDispParams.rgvarg[0].bstrVal// CComBSTR("Dvvccc");
      

  4.   

    问错了
     DISPPARAMS dispparams=*pDispParams;
     BSTR cancan= dispparams.rgvarg[0].bstrVal;// CComBSTR("Dvvccc");为什么会出现有的时候能读入成功有的时候却不能??
      

  5.   


    pDispParams没有申请空间?
      

  6.   

    其它都搞定了
    这个问题
    BSTR retb=CComBSTR("Dvvccc");//CComBSTR(fh);
    VARIANT vRets;
    vRets.vt=VT_BSTR;
    vRets.bstrVal=retb;
    *pVarResult=vRets;这里有什么不对吗???为什么有的时候能成功有的却不能?
      

  7.   

    你可能需要将 retb 修改成 SysAllocString 返回的指针,而不能简单等于一个 CComBSTR 的对象,这个对象是在函数运行栈中才有意义的对象。
      

  8.   

    正确答案已出。达人 lazy_2010 将获得90分的答案!多谢各位达人了!;来着有份