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