你怎么给EventValue赋值的?
最好用SysAllocString()或者CComBSTR的Copy方法赋返回值.另外如果用ATL的话,最好不要写成dispinterface _ILogSvcClientEvents
写成interface _ILogSvcClientEvents : IDispatch 好一些。

解决方案 »

  1.   

    还有 EventValue 是out参数。
      

  2.   

    服务对象的代码这样写,对吗?
    STDMETHODIMP CLogSvcClient::RefreshExtension()
    {
    // TODO: Add your implementation code here
    T_EXTENSIONS *pExtensions;
    CExtension *pExtension;
    HRESULT hreturn;         pExtensions=_Module.m_Logger.GetExtensions();
    pExtensions->InitGet();
    while (!pExtensions->IsEof()){
    pExtension = NULL;
    pExtensions->Get(&pExtension);
                      _variant_t varStrIP(pExtension->GetStrIP()); if(pExtension->GetState() == EXTENSION_AUDIO)
                       hreturn=Fire_SendEvent(L_EXT_STATE_RECORD,varStrIP.Detach());
    else
                       hreturn=Fire_SendEvent(L_EXT_STATE_IDLE,varStrIP.Detach());

    pExtensions->Skip();
    }
    pExtensions->TermGet();
    return hreturn;
    }
      

  3.   

    dispinterface _ILogSvcClientEvents
    是我用ATL的Wizard 自动生成的。它与
    interface _ILogSvcClientEvents : IDispatch 
    有区别吗?
      

  4.   

    相对服务对象
    long EventType, VARIANT EventValue 
    都是输入参数,我觉得不应用[out]
    对吗?
      

  5.   

    是用VB吗,可能需要用StrConv转换一下。
    VC就用SysAllocString,和由USE_CONVERSION宏转换