Эквивалентный тип для CMapStringToString в C ++ / CLI - PullRequest
0 голосов
/ 12 декабря 2011

Мне нужно написать управляемую оболочку .NET для функции C ++, определенную следующим образом:

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 пуст (то есть в C #, когда я сделал nMap.Count , он вернул 0, тогда как для того же примера в C ++ я получал 6)

1 Ответ

0 голосов
/ 13 декабря 2011

Заменить

orig_map.GetStartPosition()

и

orig_map.GetNextAssoc(...

с

(*mapRef).GetStartPosition()

и

(*mapRef).GetNextAssoc(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...