调用COM新建一个空白文档并加入链接

来源:互联网 发布:网络销售培训简介 编辑:程序博客网 时间:2024/05/18 00:33
// AddHyperLinkViaCom.cpp : Defines the entry point for the console application.//#include "stdafx.h"HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) {va_list marker;va_start(marker, cArgs);if(!pDisp) {_exit(0);}DISPPARAMS dp = { NULL, NULL, 0, 0 };DISPID dispidNamed = DISPID_PROPERTYPUT;DISPID dispID;HRESULT hr;char buf[200];char szName[200];WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);if(FAILED(hr)) {sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx",szName, hr);printf("%s\n",buf);//_exit(0);return hr;}VARIANT *pArgs = new VARIANT[cArgs+1];for(int i=0; i<cArgs; i++) {pArgs[i] = va_arg(marker, VARIANT);}dp.cArgs = cArgs;dp.rgvarg = pArgs;if(autoType & DISPATCH_PROPERTYPUT) {dp.cNamedArgs = 1;dp.rgdispidNamedArgs = &dispidNamed;}hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);if(FAILED(hr)) {sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx",szName, dispID, hr);printf("%s\n",buf);//_exit(0);return hr;}va_end(marker);delete [] pArgs;return hr;}int _tmain(int argc, _TCHAR* argv[]){HRESULT hr;CLSID wdCLSID;IDispatch *wdApp;hr =  OleInitialize(NULL);if(SUCCEEDED(hr)){CLSIDFromProgID(L"Word.Application",&wdCLSID);CoCreateInstance(wdCLSID,NULL,hr = CLSCTX_LOCAL_SERVER|CLSCTX_INPROC_SERVER,IID_IDispatch,(void **)&wdApp);if(SUCCEEDED(hr)){VARIANT x;x.vt = VT_I4;x.lVal =1;hr = AutoWrap(DISPATCH_PROPERTYPUT,NULL,wdApp,L"Visible",1,x);if(SUCCEEDED(hr)){IDispatch *wdDocuments;VariantInit(&x);hr =  AutoWrap(DISPATCH_PROPERTYGET, &x, wdApp,L"Documents", 0);if(SUCCEEDED(hr)){wdDocuments = x.pdispVal;IDispatch * wdDocument;VariantInit(&x);VARIANT m;m.vt = VT_ERROR;m.lVal = (long)DISP_E_PARAMNOTFOUND;VARIANT F,T;F.vt = VT_BOOL;F.boolVal = false;T.vt = VT_BOOL;T.boolVal = true;//这里用DISPATCH_METHOD不能用DISPATCH_PROPERTYGEThr = AutoWrap(DISPATCH_METHOD,&x,wdDocuments,L"Add",4,T,m,F,m);if(SUCCEEDED(hr)){wdDocument = x.pdispVal;IDispatch * wdHyperLinks;IDispatch * wdRange;VariantInit(&x);hr =  AutoWrap(DISPATCH_PROPERTYGET, &x,wdDocument,L"HyperLinks",0);if(SUCCEEDED(hr)){wdHyperLinks = x.pdispVal;hr =  AutoWrap(DISPATCH_METHOD,&x,wdDocument,L"Range",2,m,m);if(SUCCEEDED(hr)){wdRange = x.pdispVal;VariantInit(&x);VARIANT A,D,Ar;A.vt = VT_BSTR;A.bstrVal = SysAllocString(L"http://www.google.com");D.vt = VT_BSTR;Ar.vt = VT_DISPATCH;Ar.pdispVal = wdRange;D.bstrVal = SysAllocString(L"google");hr = AutoWrap(DISPATCH_METHOD,&x,wdHyperLinks,L"Add",6,m,D,m,m,A,Ar);if(SUCCEEDED(hr)){printf("Add HyperLink successfully!\n");}}}}}}}}system("pause");CoUninitialize();return 0;}

原创粉丝点击