VC检测OLE控件是否已经注册,并注册它

如果OLE控件不存在的话,在
  try
  {
                   HRESULT hr;
     hr = ::CoInitializeEx( Null, COINIT_APARTMENTTHREADED );
                  if( FAILED(hr) )
                  _com_issue_error(hr);
  
LabLE1:      
          hr = m_lpAnimator.CreateInstance(CLSID_GifAnimator);
        if( FAILED(hr) )
       _com_issue_error(hr);  //如果控件没有注册,就会抛出异常
}
catch( _com_error e )
{
  //////////////////////////////////////////////////////////////////////////
  //这个可以检测该控件是否已经注册,如果没有注册则注册;
  CString str="没有注册类别";
  if (str==e.ErrorMessage())
  {
   char *p=str.GetBuffer(500);
   GetCurrentDirectory(500,p);
   str.ReleaseBuffer();
   str+="[url=file://\\ImageOle.dll]\\ImageOle.dll[/url]";
   CString regstr;
   regstr.Format("regsvr32 /s %s",str);
      WinExec(regstr,0);
      goto LabLE1;  //这里有点不合理,哈哈,凑合着用吧
  }
  AfxMessageBox(e.ErrorMessage());
  ::CoUninitialize();
}
的时候就会抛出异常;
在异常里这样做

posted on 2011-05-06 17:46  carekee  阅读(564)  评论(0编辑  收藏  举报