一千萬個為什麽

搜索

C ++/CLI中CMapStringToString的等效類型

我需要為C ++函數編寫一個.NET托管包裝器,定義如下:

void getMap(CMapStringToString*& Map);

此函數在Map變量中存儲必要的信息。

現在我將函數包裝如下,但我不知道從包裝函數得到正確的輸出:

void GetMap(System::Collections::Specialized::StringDictionary ^% nMap)
{
  CMapStringToString orig_map, *map = &orig_map, *&mapRef = map;
  m_pUnmanagedObject->getMap(mapRef);
  for(POSITION pos = orig_map.GetStartPosition(); pos != NULL; )
  {
    CString key, pa, &paRef = pa;
    orig_map.GetNextAssoc(pos, key, paRef);
    nMap->Add(gcnew System::String((LPCTSTR)key), gcnew System::String((LPCTSTR)pa));
  }
}

包裝器肯定有問題,因為當我使用C ++代碼時,我得到了正確的輸出但是當我使用包裝器代碼時, nMap 是空的(即在我做 nMap時在C#中.Count ,它返回0而對於C ++中的同一個例子我得到了6)

最佳答案

更換

orig_map.GetStartPosition()

orig_map.GetNextAssoc(...

(*mapRef).GetStartPosition()

(*mapRef).GetNextAssoc(...

轉載註明原文: C ++/CLI中CMapStringToString的等效類型