描述:
我做的主要是用COM中的ATL来实现在WORD文档中添加一个工具栏按钮,在WORD中通过点击该按钮,会在文档的光标处添加一张指定的图片。导入OFFICE中的库
工具的设置都没问题,程序编译通过了,但是运行却出现错误,然后停止。肯定是我调用WORD的接口指针时出现了问题,附上我的图片贴入代码。
首 先 调 用 A P I 函 数CLSIDFromProgID( ), 将程序名“Word.Application”转换为类标识符,再将类标识符传递给GetActiveObject( ),便
可获得Word 的IUnknown 接口,接下来调用QueryInterface()函数最终获得接口指针pDisp,也就获得了当前文档的控制权。
程序编译没有问题
CLSID clsid;
CLSIDFromProgID(L"Word.Application",&clsid);
IUnknown *punk;
IDispatch *pDisp;
HRESULT hr=GetActiveObject(clsid,NULL,(IUnknown**)&punk);
if(SUCCEEDED(hr))
{ hr=punk->QueryInterface(IID_IDispatch,(void **)&pDisp);
ATLASSERT(!FAILED(hr));
// app->AttachDispatch(pDisp,true);
// CComPtr <Word::_Application> app(pDisp);
Word::_ApplicationPtr app=pDisp;
Word::SelectionPtr m_wordselection=app->GetSelection();
Word::RangePtr m_wordrange = m_wordselection->GetRange();
Word::InlineShapesPtr m_wordshape = m_wordrange->GetInlineShapes();
// LPCTSTR FileName = L"D:\图像\Blood.bmp";
CComVariant LinkToFile(FALSE);
CComVariant SaveWithDocument(TRUE);
CComVariant RangeT;
RangeT.vt = VT_DISPATCH;
RangeT.pdispVal = m_wordrange;
m_wordshape->AddPicture("Blood.bmp",&LinkToFile,&SaveWithDocument,&RangeT);
}

