编译环境,VC6
使用类库: excel9.h ,excel9.cpp
全局变量: _Application oApp, WorkBooks oBooks
在程序开始运行的时候,即do.Module();之前即实例化:
oApp.CreateDispatch( "Excel.Application" );在大致运行了30分钟(具体时间不清楚,但是如果时间很短,不会有以下问题!)后,程序进入真正使用excel生成数据结果的函数中,
在一开始,使用oBooks = oApp.GetWorkbooks();
的时候,就抛出一个exception,程序无法继续运行.鉴于这种情况,我用
if (!oApp)
{
 ...
}来判断,并希望通过重新CreateDispatch来获得oApp,但是发现这个if语句进不去,换句话说:
实际上这个oApp并没有丢失,我看过它的数据情况,其成员m_lpDispatch仍旧存在,但是不知道为什么会出现这样的错误?小弟恳请各路英雄帮助解决! 谢谢!

解决方案 »

  1.   

    “30分钟”内有没有使用oApp?
    如果没有,何必那么早oApp.CreateDispatch( "Excel.Application" );
      

  2.   

    do you use thread in your project?remember call CoInitilize in each thread.
    see 
    HOWTO: Automate Excel 97/2000 and Then Know the User Closed It Q192348
      

  3.   

    to sinall:
         因为如果在需要的地方即时的CreateDispatch,在程序末尾进行oApp.Quit();和oApp.ReleaseDispatch();之后,Excel进程仍旧在系统中存在,为了避免每次调用都驻留一个Excel进程才这么做的,实在是无奈. 需要补充的是,我在.net环境下编译的这样的代码不存在此类问题;
    to kingzai:
         There is three threads in my project,but only this one use Excel OLE,should i CoInitilize it in every threads of my project ? thanks
      

  4.   

    yes ,try call CoInitilize in each trhead.