读书人

调用COM接口建立一个AppointmentItem并

发布时间: 2013-01-02 13:08:44 作者: rapoo

调用COM接口建立一个AppointmentItem并在Body中添加链接

// Outlook_AddLink.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <Windows.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 olCLSID;IDispatch *olApp;hr =  OleInitialize(NULL);if(SUCCEEDED(hr)){VARIANT m;m.vt = VT_ERROR;m.lVal = (long)DISP_E_PARAMNOTFOUND;CLSIDFromProgID(L"Outlook.Application",&olCLSID);hr = CoCreateInstance(olCLSID,NULL,CLSCTX_LOCAL_SERVER|CLSCTX_INPROC_SERVER,IID_IDispatch,(void **)&olApp);if(SUCCEEDED(hr)){IDispatch * olAppointmentItem;VARIANT x,T;VariantInit(&x);T.vt = VT_INT;T.intVal = 1;hr =  AutoWrap(DISPATCH_METHOD, &x,olApp,L"CreateItem",1,T);if(SUCCEEDED(hr)){olAppointmentItem = x.pdispVal;IDispatch * olInspector;T.vt = VT_BOOL;T.boolVal = false;VariantInit(&x);hr =  AutoWrap(DISPATCH_METHOD, &x,olAppointmentItem,L"Display",1,T);VariantInit(&x);hr =  AutoWrap(DISPATCH_METHOD, &x,olAppointmentItem,L"GetInspector",0);if(SUCCEEDED(hr)){olInspector = x.pdispVal;IDispatch * wdDocument;hr = AutoWrap(DISPATCH_PROPERTYGET,&x,olInspector,L"WordEditor",0);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;}

读书人网 >其他相关

热点推荐