傳遞自動化字串陣列 (轉)

amyz發表於2007-10-17
傳遞自動化字串陣列 (轉)[@more@] 

最近要用自動化傳遞字串陣列,查閱MSDN相關資料,還是覺得不夠詳盡。費了好大力氣才調通,(也可能是水平不夠,見笑)。特寫下一簡單例項,希望會對其他人有所幫助。

 :namespace prefix = o ns = "urn:schemas--com::office" />

為自動化傳遞陣列要選擇VARIANT型別,在元件中建立分配,由COM機制來釋放記憶體。所以COM客戶在用完元件要SET OBJ=NULL來清記憶體。自動化傳遞的字串是BSTR型,選用_bstr_t包裝類會簡單的多。

 

解釋:建立陣列,陣列賦值,將陣列傳入返回值。

希望和大家交流,也請將錯誤指出。聯絡:

本程式在VC6,中測試透過。以下是程式碼:

 

STDMETHOD(GetArray)(/*[out]*/VARIANT* pArray);

STDMETHODIMP CRegWorker::GetArray(VARIANT *pArray)

{

  AFX_MANAGE_STATE(AfxGetStaticModuleState())//選擇MFC支援自動新增

 

  int i;

  _bstr_t  Temp;//#include ,為操作BSTR簡單

  PCHAR ArrayBack[] = {//返回的陣列,最簡單的形式

  "string1",

  "string2", 

  "string3", 

  "string4", 

  "string5" 

      };

 

    SAFEARRAY* psa;//定義陣列描述符

  SAFEARRAYBOUND bound[1] = { 5,1 };  //一維陣列

  psa = SafeArrayCreate ( VT_BSTR, 1, bound );//建立陣列

  _ASSERTE ( psa != NULL );

 

  for( i=1;i<6;i++){

  Temp = _bstr_t(ArrayBack[i-1]);

    SafeArrayPutElement(psa,(long*)&i,Temp.copy());//陣列賦值,必須是BSTR型

    }

   

  pArray->vt = VT_ARRAY | VT_BSTR;//VARIANT型別定義,BSTR型陣列

  pArray->parray = psa; //陣列傳入返回值

 

  return S_OK;

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977194/,如需轉載,請註明出處,否則將追究法律責任。

相關文章