各位大虾救命啊,VARIANT的问题...

lyczm 2001-09-12 01:45:03
我写了一个自动化服务对象,有如下出接口:
dispinterface _ILogSvcClientEvents
{
properties:
methods:
[id(1), helpstring("method SendEvent")] HRESULT SendEvent([in]long EventType, [in]VARIANT EventValue );
};
我在客户端写了一个接受器收到的long 类型的EventType 值正确,而VARIANT 类型的EventValue中的是BSTR项是乱码 ,小第实在是没辙了救救我吧!!!
...全文
147 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyzegg 2001-09-12
  • 打赏
  • 举报
回复
是用VB吗,可能需要用StrConv转换一下。
VC就用SysAllocString,和由USE_CONVERSION宏转换
lyczm 2001-09-12
  • 打赏
  • 举报
回复
相对服务对象
long EventType, VARIANT EventValue
都是输入参数,我觉得不应用[out]
对吗?
lyczm 2001-09-12
  • 打赏
  • 举报
回复
dispinterface _ILogSvcClientEvents
是我用ATL的Wizard 自动生成的。它与
interface _ILogSvcClientEvents : IDispatch
有区别吗?
lyczm 2001-09-12
  • 打赏
  • 举报
回复
服务对象的代码这样写,对吗?
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;
}
arxing 2001-09-12
  • 打赏
  • 举报
回复
还有 EventValue 是out参数。
arxing 2001-09-12
  • 打赏
  • 举报
回复
你怎么给EventValue赋值的?
最好用SysAllocString()或者CComBSTR的Copy方法赋返回值.

另外如果用ATL的话,最好不要写成dispinterface _ILogSvcClientEvents
写成interface _ILogSvcClientEvents : IDispatch 好一些。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧