请教VC操作Word的代码问题!

PLeeA 2008-10-09 10:15:05
看了huimin yu的贴子,是解决VC操作WORD时重复创建Word对象的问题,就是先判断是否已经有WINWORD.EXE,如果有就不再创建。大致的代码如下:
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);// 缺省对象

CComVariant tpl(lpszFilePath),
NewTemplate(false),
DocType(0),
Visble;

CComVariant SaveChanges(false),
OriginalFormat,
RouteDocument;

CApplication oWordApp ;
CDocuments oDocs ;
CDocument0 oDoc ;


HRESULT hr ;
IUnknown *pUnk ;
IDispatch *pDisp ;
CLSID clsid ;

hr = CoInitialize( NULL );

//ASSERT( !FAILED(hr) );
if ( FAILED(hr) ){
AfxMessageBox( TEXT("failed to call CoInitialize()" ));
}

CLSIDFromProgID( TEXT("Word.Application"), &clsid );

// 查看是否有已经打开的Word对象
hr = GetActiveObject( clsid, NULL, (IUnknown**)&pUnk );

// 若有word在运行,就得到当前运行word的实例
if ( !FAILED(hr) ){

hr = pUnk->QueryInterface( IID_IDispatch, (void **)&pDisp );
ASSERT( !FAILED(hr) );

oWordApp.AttachDispatch( pDisp, TRUE );

pUnk -> Release();


}
// 若无,则新建一个Word对象
else {

if ( !oWordApp.CreateDispatch( TEXT( "Word.Application" ),NULL) ){

AfxMessageBox( TEXT( "创建ms_word对象失败" ) );
rval = RC_CANCELED_BY_USER ;
goto PROC_END ;

}
}

// 创建文档
oDocs.AttachDispatch( oWordApp.get_Documents() );

// 打开一个新文档,将文件的内容添加到新文档中
oDoc.AttachDispatch( oDocs.Add( &tpl , &NewTemplate , &DocType , &Visble ) );

//===================================
// 其他处理word文件的代码
//=====================================

// 关闭word文档
//oWordApp.Quit( vFalse, &OriginalFormat, &RouteDocument ); // 若用此方法关闭word,则用户打开的word也被关闭,用close
oDoc.Close( vFalse, &OriginalFormat, &RouteDocument );// vFalse若为vTrue,则新文档不能关闭



她是用VS 2005写的代码
其中的CLSIDFromProgID( TEXT("Word.Application"), &clsid );在我机器安装的VC 6.0环境下,老是报错,说什么第一个变量无法转换成第二个变数,还请大家帮忙找找原因。谢谢!
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
csucdl 2008-10-11
  • 打赏
  • 举报
回复
调试啊, 没别的啦
feilinhe 2008-10-10
  • 打赏
  • 举报
回复
你好:
我收到了你发的私信了,我不是什么高手,呵呵
我在我的电脑上用下面的方式编译通过了:
::CLSIDFromProgID(L"Word.Application.11", &clsid );
你试一下看
PLeeA 2008-10-09
  • 打赏
  • 举报
回复
feilinhe,你好!
我按照你说得方法试过了,但是还是不行。而且有朋友说把TEXT去掉或改成L,但是都不行。
调试报错:error C2664: 'CLSIDFromProgID' : cannot convert parameter 1 from 'char [20]' to 'const unsigned short *'Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
我需要得这个函数CLSIDFromProgID是ole32.dll里面的,感觉是这个.dll的问题。
但是我尝试加载这个.dll,却怎么也加载不成功,还请指点迷津,谢谢!
feilinhe 2008-10-09
  • 打赏
  • 举报
回复
你改成Word.Application.版本号,试试(office2003的版本号是11)

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧