我在程序中用了进程外组件, 程序结束时用CoUninitialize时抛出异常,用 catch(_com_error e)没有捕捉到此异常, 它抛出的是什么异常?
抛异常有哪些原因?高分求救。不够再加
非常急这个问题只在98系统下存在, 2k, xp, 2003下都无此问题
windows的东西很多都是98跟其它的不一样, 这里又是有什么不同呢?

解决方案 »

  1.   

    检查一下是不是在CoUninitialize 调用的时候还有未完结的接口引用? 这个问题经常发生在使用 #inmport 生成的 智能接口 包装上.
    比如:void main()
    {
       CoInitialize(NULL);   IApplicationPtr  app;
       app.CreateInstance(...);   try{
       }
       catch(_comn_error&) {}   CoUninitialize();
    }
    在上面这种情况下,极易出问题, 因为 app 接口不会在CoUninitialize 之前释放. 这种情况是未定义的. 会发生什么谁也不能肯定. 正确地做法是 明确地在 卸载 COM 前释放所有的 COM 接口引用:  ...
     app.Release();
     CoUninitialize();
    }
      

  2.   

    智能指针包装类用法:#import "D:\Temp\vc\simpCOM\Debug\simpCOM.dll" no_namespaceCoInitialize(NULL);{   IFooPtr spFoo = NULL;   spFoo.CreateInstance(__uuidof(Foo));   spFoo->SayHello();}CoUninitialize();