{}的问题

spdia 2001-01-24 09:57:00
MCSD中的一个程序,去掉两个{}运行时就出问题,为什么?


int main(int argc, char* argv[])
{
::CoInitialize(NULL);
{//去掉这个
IEncoderPtr pServer;
HRESULT hr = pServer.CreateInstance( __uuidof( Encoder ) );


if(SUCCEEDED(hr))
{
short nKey = 1;
cout<<"Enter a key between -5 and +5: ";
cin>>nKey;

_bstr_t bstrHello = "Hello world";
_bstr_t bstrCodedHello;

try
{
pServer->Key=nKey;
bstrCodedHello=pServer->EncodeString(bstrHello);

cout<<"\n"<<bstrHello<<"\n\n";
cout<<bstrCodedHello<<"\n";
}
catch(_com_error e)
{
cout<<e.ErrorMessage()<<"\n";
}
}



}//去掉这个
::CoUninitialize();
return 0;
}
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
spdia 2001-01-25
  • 打赏
  • 举报
回复
我想了一个晚上,就是这个原因.
horris 2001-01-24
  • 打赏
  • 举报
回复
因为IEncoderPtr需要在CoUninitialize之前被销毁!加上{}后,在}之后,IEncoderPtr被(从栈上)销毁,如果没有这个},IEncoderPtr(实际是个COM接口的指针)将在CoUninitialize之后main结束前被销毁,在调CoUninitialize这后调任何COM的API都是非法的。

3,245

社区成员

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

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