Мне нужно написать управляемую оболочку .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)