判断本机office安装版本的方法分享
判断本机office安装版本的方法分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#include"msword.h"HRESULTAutoWrap(intautoType,VARIANT*pvResul...

复制代码 代码如下:

#include "msword.h"

HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp,

LPOLESTR ptName, int cArgs...)

{

// Begin variable-argument list

va_list marker;

va_start(marker, cArgs);

if (!pDisp)

{

_putws(L"NULL IDispatch passed to AutoWrap()");

_exit(0);

return E_INVALIDARG;

}

// Variables used

DISPPARAMS dp = { NULL, NULL, 0, 0 };

DISPID dispidNamed = DISPID_PROPERTYPUT;

DISPID dispID;

HRESULT hr;

// Get DISPID for name passed

hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);

if (FAILED(hr))

{

wprintf(L"IDispatch::GetIDsOfNames("%s") failed w/err 0x%08lxn",

ptName, hr);

_exit(0);

return hr;

}

// Allocate memory for arguments

VARIANT *pArgs = new VARIANT[cArgs + 1];

// Extract arguments...

for(int i=0; i < cArgs; i++)

{

pArgs[i] = va_arg(marker, VARIANT);

}

// Build DISPPARAMS

dp.cArgs = cArgs;

dp.rgvarg = pArgs;

// Handle special-case for property-puts

if (autoType & DISPATCH_PROPERTYPUT)

{

dp.cNamedArgs = 1;

dp.rgdispidNamedArgs = &dispidNamed;

}

// Make the call

hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,

autoType, &dp, pvResult, NULL, NULL);

if (FAILED(hr))

{

wprintf(L"IDispatch::Invoke("%s"=%08lx) failed w/err 0x%08lxn",

ptName, dispID, hr);

_exit(0);

return hr;

}

// End variable-argument section

va_end(marker);

delete[] pArgs;

return hr;

}

void Cwps_msword2013Dlg::OnBnClickedButton1()

{

CString strAppName = OLESTR("word.application");

bool bResult = false;

IDispatch * wordApp;

CLSID appClsid;

if(S_OK == CLSIDFromProgID(strAppName, &appClsid))

{

if(S_OK == CoCreateInstance(appClsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&wordApp))

{

Word::_Application appWord;

if(S_OK == wordApp->QueryInterface(IID_IDispatch, (void**)&appWord))

{

CString strVersion = _T("");

strVersion = appWord.GetVersion();

if(_ttoi(strVersion) >= 15.0)

{

bResult = true;

}

}

}

AutoWrap(DISPATCH_METHOD, NULL, wordApp, L"Quit", 0);

wordApp->Release();

}

if(bResult)

MessageBox(_T("ok"), _T("tip"));

else

MessageBox(_T("no"), _T("tip"));

//return bResult;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类