你怎么给EventValue赋值的?
最好用SysAllocString()或者CComBSTR的Copy方法赋返回值.另外如果用ATL的话,最好不要写成dispinterface _ILogSvcClientEvents
写成interface _ILogSvcClientEvents : IDispatch 好一些。
最好用SysAllocString()或者CComBSTR的Copy方法赋返回值.另外如果用ATL的话,最好不要写成dispinterface _ILogSvcClientEvents
写成interface _ILogSvcClientEvents : IDispatch 好一些。
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;
}
是我用ATL的Wizard 自动生成的。它与
interface _ILogSvcClientEvents : IDispatch
有区别吗?
long EventType, VARIANT EventValue
都是输入参数,我觉得不应用[out]
对吗?
VC就用SysAllocString,和由USE_CONVERSION宏转换