我需要为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 是空的(即在我做的时候在C#中< em> nMap.Count ,它返回0而对于C ++中的相同示例我得到了6)
答案 0 :(得分:0)
替换
orig_map.GetStartPosition()
和
orig_map.GetNextAssoc(...
与
(*mapRef).GetStartPosition()
和
(*mapRef).GetNextAssoc(...