我在事件触发函数中用了多个接收参数,来接收服务端的反馈消息。
   OnRequest(  VARIANT myVariant1, VARIANT myVariant2,VARIANT myVariant3, VARIANT myVariant4, VARIANT* myVariant5, VARIANT* myVariant6)  但我现在得到的值,和服务端给我的值不一样。
  想问问有没有人做过类似的程序,能指点我以下。
  谢谢!

解决方案 »

  1.   

    两个函数是两个人写的。同事用DELPHI写的发布函数,我用VC 写的接收部分。
    现在感觉是只要连续的两个参数类型相同,则后面那个值就会出问题。
    不知道是什么原因。
      

  2.   

    我有如下一个函数
        OnRequest(  VARIANT myVariant1, VARIANT myVariant2,VARIANT myVariant3, VARIANT myVariant4, VARIANT* myVariant5, VARIANT* myVariant6)
      使用了6个VARIANT 类型来接收不同的消息参数,但我得到的内容和同事程序发给我的不一样。
      现在反复实验的结果是,参数多与三个就有问题。有两个连续相同类型的就不行。LONG ,VARIANT ,LONG 这种形式又是可以的。
      再试也试不出什么名堂了希望遇到过的人指点一下。
      

  3.   

    基本代码如下:
    static _ATL_FUNC_INFO OnRequestInfo = {CC_STDCALL, VT_EMPTY, 6 , { VT_VARIANT} };
     
     //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    class CAppObj : public IDispEventSimpleImpl<0, CAppObj , &__uuidof(IjqtMsgEvents)>
    {
    public:
    CAppObj()
    {
    } BEGIN_SINK_MAP(CAppObj )
    //Make sure the Event Handlers have __stdcall calling convention
    SINK_ENTRY_INFO(IDC_SRCOBJ, __uuidof(IjqtMsgEvents), DISPID_ONREQUEST, OnRequest, &OnRequestInfo)
       END_SINK_MAP() // Event handler 
    HRESULT __stdcall OnRequest( VARIANT FunctionCode, VARIANT Header, VARIANT Params, 
                             VARIANT OptionalParams, VARIANT* Returndata,  VARIANT* ErrorCode)
    {
    _variant_t&  TMP = (_variant_t&) Header;
    if(TMP.vt!=VT_NULL)
    {
    CString str;
    TMP.ChangeType(VT_BSTR);
    str=TMP.bstrVal;
    MessageBox(NULL,  str , "Test", MB_OK);
    }
    else
    {
    ;
    }
      return S_OK; }