程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 調用COM新建一個空白文檔並加入鏈接

調用COM新建一個空白文檔並加入鏈接

編輯:C++入門知識

[cpp]   // 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_PROPERTYGET                       hr = 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;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved