我用vc++6.0创建word文档时,其中一段语句如下: if(!app.CreateDispatch(_T("Word.Application"))) //启动WORD
{
AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));
return;
}这应该是用来检测word是否创建成功的,如果成功,是不会出现对话框"居然你连OFFICE都没有安装吗?"的,但是我每次运行时都弹出该对话框,显然是word没创建成功。我装的是office2007,word当然也安装了,在MFC ClassWizard中选了MSWORD.olb的_Application类在Initlnstance()中用AfxOleInit();作了COM初始化整段程序如下(是对话框"确定"按钮的代码,借鉴了别人的):#include "msword.h"void CStep1Dlg::OnOK() 
{ _Application app; //定义一个WORD的应用对象 if(!app.CreateDispatch(_T("Word.Application"))) //启动WORD
{
AfxMessageBox(_T("居然你连OFFICE都没有安装吗?"));
return;
} AfxMessageBox(_T("WORD 已经运行启动啦,你可以用Ctrl+Alt+Del查看"));
app.SetVisible(TRUE); //设置WORD可见。
//当然,如果你想要悄悄地调用WORD的功能,则注释掉这条语句
AfxMessageBox(_T("现在你已经看到WORD的程序界面了吧")); AfxMessageBox(_T("WORD准备要退出啦"));
VARIANT SaveChanges,OriginalFormat,RouteDocument; //定义调用QUIT时使用的参数
SaveChanges.vt=VT_BOOL; //设置退出WORD时候的保存参数
SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置 ::VariantInit(&OriginalFormat); //清空变量
RouteDocument.vt=VT_EMPTY; //清空变量的另一种方法 //调用Quit退出WORD应用程序。当然不调用也可以,那样的话WORD还在运行着那
app.Quit(&SaveChanges,&OriginalFormat,&RouteDocument); app.ReleaseDispatch(); //释放对象指针。切记,必须调用 AfxMessageBox(_T("Step1执行完成。接着请学习Setp2"));
}问题究竟出在哪里?本人是初学者,还请高手指教,谢谢了!

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=1186
      

  2.   

    很奇怪
    你的AfxOleInit调用成功了么
      

  3.   

    怎么看AfxOleInit是否调用成功?
    还有调试时运行到if(!app.CreateDispatch(_T("Word.Application"))) 时,调试窗口出现
    Warning: CreateDispatch returning scode = REGDB_E_CLASSNOTREG ($80040154).
      

  4.   

    我调试了,看到AfxOleInit返回值是1,应该正确调用了吧
      

  5.   

    调试时运行到if(!app.CreateDispatch(_T("Word.Application"))) 时,调试窗口出现
    Warning: CreateDispatch returning scode = REGDB_E_CLASSNOTREG ($80040154).
    是什么情况?
      

  6.   

    上班聊QQ不方便
    你说的那个错误是组建没有成功注册
    所以我才说你的Office是不是绿色的
      

  7.   

    解决了,我换了vs2010编译成功,可能是编译器的问题,谢谢楼上。还有个问题,我想在新建word的指定位置插入文字,如何设置光标位置?需要添加什么类?有没有比较简便的方法?
      

  8.   

    http://support.microsoft.com/kb/179494/zh-cn