欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

判斷本機office安裝版本的方法分享

 更新時間:2014年01月31日 01:22:33   作者:  
這篇文章主要介紹了判斷本機office安裝版本的方法分享,需要的朋友可以參考下

復制代碼 代碼如下:

#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%08lx\n",
   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%08lx\n",
   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語言轉義字符講解

    轉義字符是很多程序語言、數據格式和通信協議的形式文法的一部分。對于一個給定的字母表,一個轉義字符的目的是開始一個字符序列,使得轉義字符開頭的該字符序列具有不同于該字符序列單獨出現(沒有轉義字符開頭)時的語義。因此轉義字符開頭的字符序列被叫做轉義序列
    2022-04-04
  • 帶你深度走入C語言取整以及4種函數

    帶你深度走入C語言取整以及4種函數

    大家都知道取整這回事,但是對于取整只有單一的認識,下面這篇文章主要給大家介紹了關于C語言取整以及4種函數的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • C++類中的六大默認成員函數詳解

    C++類中的六大默認成員函數詳解

    這篇文章主要介紹了C++類中的六大默認成員函數,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 深入剖析C++中的struct結構體字節(jié)對齊

    深入剖析C++中的struct結構體字節(jié)對齊

    要求數據內存的起始地址的值是某個數k的倍數,這就是所謂的內存對齊,本文就來深入剖析C++中的struct結構體字節(jié)對齊,需要的朋友可以參考下
    2016-05-05
  • C++空類及沒有成員變量的類的大小實例分析

    C++空類及沒有成員變量的類的大小實例分析

    這篇文章主要介紹了C++空類及沒有成員變量的類的大小,對于初學者更好的了解C++的指針及類的存儲結構很有幫助,需要的朋友可以參考下
    2014-07-07
  • C 語言基礎實現青蛙跳臺階和漢諾塔問題

    C 語言基礎實現青蛙跳臺階和漢諾塔問題

    這篇文章我們九里講講C 語言基礎實現青蛙跳臺階和漢諾塔問題,感興趣的小伙伴可以參考下面文章的具體內容
    2021-09-09
  • 解讀C++編譯報錯有跡可尋

    解讀C++編譯報錯有跡可尋

    這篇文章主要介紹了解讀C++編譯報錯有跡可尋,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 全面解析設計模式中的建造者模式及相關C++實現

    全面解析設計模式中的建造者模式及相關C++實現

    這篇文章主要介紹了設計模式中的建造者模式及相關C++實現,需要的朋友可以參考下
    2016-03-03
  • 匯編語言常見錯誤信息中文注解

    匯編語言常見錯誤信息中文注解

    這篇文章主要介紹了匯編語言常見錯誤信息中文注解,本文收集大部分匯編中常見錯誤信息及對應的中文注解,需要的朋友可以參考下
    2014-09-09
  • C++類的定義與實現

    C++類的定義與實現

    這篇文章主要介紹了C++類的定義與實現,違章圍繞C++類的定義的相關資料展開全文內容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-01-01

最新評論