To correctly invoke Office automation COM APIs using up-to-date C++, you can use the following steps:
#include <Windows.h>
#include <atlbase.h>
#include <atlcom.h>
HRESULT hr;
TCHAR szProgID[] = _T("Excel.Application");
CLSID clsid;
hr = CLSIDFromProgID(szProgID, &clsid);
ATLENSURE_SUCCEEDED(hr);
CComPtr<IDispatch> spExcelApp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&spExcelApp);
ATLENSURE_SUCCEEDED(hr);
CComVariant svarResult;
CComDispatchDriver pDisp(spExcelApp);
hr = pDisp.GetPropertyByName(L"Version", &svarResult);
ATLENSURE_SUCCEEDED(hr);
wprintf(L"Excel version: %ls\n", svarResult.bstrVal);
Note that the above example is for Excel application and the ProgID for other Office applications might be different. Also, ensure that you use appropriate error handling techniques, like exceptions or HRESULT checking, for robustness.
Asked: 2022-03-14 11:00:00 +0000
Seen: 15 times
Last updated: Jun 04 '22