请问 BSTR 类型数据该怎么使用才规范??(20分)

  • 主题发起人 主题发起人 wangjiba
  • 开始时间 开始时间
W

wangjiba

Unregistered / Unconfirmed
GUEST, unregistred user!
请问 BSTR 类型数据该怎么使用??
COM组件的一个函数为
Map->Close(wchar_t** Error);
请问调用方式??
请问是这样调用规范?
BSTR Error;
Map->Close(&Error);
//主要问题是在这里的调用方式
ShowMessage(Error);
还是这样调用规范?
BSTR Error[200];
Map->Close(Error);
//主要问题是在这里的调用方式
ShowMessage(*Error);

我在例程里使用时,两种都可以,
但在加到当前项目中时总有些问题。
什么内存益处之类的...
会是什么原因呢??
我都快疯了??
大家快帮帮我!!
 
服务器端,在给out类型的参数赋值时,需要主动给它分配内存,然后由客户端释放。
最简单的方法是使用WideString,如果要返回一个字符串:
//服务器端
HRESULT _stdcall GetDateTime([out, retval] BSTR * Result );
STDMETHODIMP TSC_Obj1Impl::GetDateTime(BSTR* Result)
{
*Result = WideString(FormatDateTime("yyyy'年'mm'月'dd'日'",Now())).Detach();
return S_OK;
}
//客户端:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString S;
TCOMISC_Obj1 COMObj;
COMObj = CoSC_Obj1::Create();
COMObj->GetDateTime(&S);
//WideString帮你完成了内存分配和释放的工作
ShowMessage(S);
}
 
后退
顶部