vc++訪問javascript(3)–遍曆javascript中的數組

來源:互聯網
上載者:User

我們經常會遇到,將指令碼中定義的多個參數打包到一個數組中,然後將這個數組傳給一個組件方法。javascript和vbscript定義數組的方式是不同的。vbscript中的數組採用的是自動化相容類型SAFEARRAY,使用VC++中的CComSafeArray類可以很方便的進行遍曆。下面我們重點看看javascript中的數組如何進行遍曆。

一、javascript指令碼中數組的定義

javascript中的數組更像是一個Object對象。在javascript中,可以按數值索引給一個數組元素賦值,也可以通過名稱索引給數組元素賦值,如下:

 var oParams=new Object();
 oParams["LoginName"]="test";
 oParams["Password"]="123";
 oParams["VerifyCode"]="12PQ";

這樣賦值的好處是,每一個元素都可以標識一個明確的意義。

二、上一篇我們說過Object向外暴露IDispatchEx介面,我們就可以通過GetNextDispIDGetMemberNameInvokeEx三個方法實現對數組的遍曆。

  1. VARIANT varParams; //這是指令碼傳入的參數數組
  2.  //如果傳入的類型不是VT_DISPATCH就退回出錯資訊
  3.  if(varParams.vt!=VT_DISPATCH)
  4.   return E_INVALIDARG;
  5.  //取得IDispatchEx介面
  6.  CComPtr<IDispatchEx> pDispEx;
  7.  HRESULT hr=varParams.pdispVal->QueryInterface(IID_IDispatchEx,(void**)&pDispEx);
  8.  if(FAILED(hr))
  9.   return E_INVALIDARG;
  10.  //枚舉所有的屬性
  11.  DISPID dispid;
  12. //取得第一個元素的DISPID   
  13. hr = pDispEx->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
  14.     while (hr == NOERROR)
  15.     {
  16.   //元素名稱
  17.   CComBSTR bstrName;
  18.         hr = pDispEx->GetMemberName(dispid, &bstrName);
  19.         if (FAILED(hr))
  20.    return E_FAIL;
  21.   //元素值
  22.   CComVariant vValue;
  23.   DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
  24.   hr = pDispEx->InvokeEx(dispid, LOCALE_USER_DEFAULT, 
  25.      DISPATCH_PROPERTYGET, &dispparamsNoArgs, 
  26.      &vValue, NULL, NULL);
  27.   if(FAILED(hr))
  28.    return E_FAIL;
  29.      //取得下一個元素的DISPID   
  30.         hr = pDispEx->GetNextDispID(fdexEnumAll, dispid, &dispid);
  31.  }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.