我下载了一个Office Application,里面有Vc操作Word的例子.
例子在本机器上执行成功的,
然后我把头文件和CPP文件复制到我的工程下面编译通过了,
但执行时这个语句时
if (!oWordApp.CreateDispatch("Word.Application", NULL))
    {
        AfxMessageBox("CreateDispatch failed.", 
                      MB_OK | MB_SETFOREGROUND);
        return;
    }
就说CreateDispatch failed,这是怎么回事呢?q
我感到很奇怪为什么代码一样的我的工程要出错,而且都是对话框程序.

解决方案 »

  1.   

    类型库已经导入到word中,msword9.ole执行如下代码,提示不能CreateDispatch failedvoid CSiCa::OnButton1() 
    {
        //Commonly used variants.
        COleVariant vTrue((short)TRUE),
                    vFalse((short)FALSE),
                    vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);    //Start a new instance of Microsoft Word
        _Application oWordApp;
        if (!oWordApp.CreateDispatch("Word.Application", NULL))
        {
            AfxMessageBox("为什么不能创建.", 
                          MB_OK | MB_SETFOREGROUND);
            return;
        }    try
        {      //Create a new document
          Documents oDocs;
          _Document oDoc;
          oDocs = oWordApp.GetDocuments();
          oDoc = oDocs.Add(vOpt, vOpt,vOpt, vOpt);      //Add text to the document
          Selection oSel;
          oSel = oWordApp.GetSelection();
          oSel.TypeText("one");
          oSel.TypeParagraph();
          oSel.TypeText("two");
          oSel.TypeParagraph();
          oSel.TypeText("three");      //Save the document
          _Document oActiveDoc; 
          oActiveDoc = oWordApp.GetActiveDocument();
          oWordApp.SetVisible(TRUE);
          
       
          oActiveDoc.SaveAs(COleVariant("e:\\mydoc.doc"), 
                            COleVariant((short)0),
                            vFalse, COleVariant(""), vTrue, COleVariant(""),
                            vFalse, vFalse, vFalse, vFalse, vFalse);
       }
        
       catch(COleException *e)
       {
          LPVOID lpMsg;
          ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                         FORMAT_MESSAGE_FROM_SYSTEM | 
                         FORMAT_MESSAGE_IGNORE_INSERTS, NULL, e->m_sc,
                         MAKELANGID(LANG_NEUTRAL, 
                         SUBLANG_DEFAULT),(LPTSTR) &lpMsg,
                         0, NULL);
          ::MessageBox(NULL, (LPCTSTR)lpMsg, "COM Error", 
                      MB_OK | MB_SETFOREGROUND);
          ::LocalFree( lpMsg );
       }   catch(COleDispatchException *e)
       {
          char msg[512];
          sprintf(msg, "Run-time error '%d':\n\n%s", 
               e->m_scError & 0x0000FFFF, e->m_strDescription);
          ::MessageBox(NULL, msg, "Server Error", 
                      MB_OK | MB_SETFOREGROUND);      
       }
       //Quit the application
       oWordApp.Quit(vFalse, vOpt, vOpt);

    }
      

  2.   

    在你的程序开始处要初始化COM,你是不是忘了啊?
    如在OnInitDialog加上一句CoInitialize(NULL):
    BOOL CMywordDlg::OnInitDialog()
    {
    CoInitialize(NULL);   // 初始化COM          ... // 你的代码
    }
      

  3.   

    结束的时候也别忘了CoUninitialize