Вот определение функции в c ++:
struct StructDefineInCPlus
{
const wchar_t* Type;
const wchar_t* Value;
const wchar_t* Data;
};
int GetWhatIWant(_Out_ std::map<const wchar_t*, StructDefineInCPlus>& parameter)
{
parameter[key1].Type = L"Type1";
parameter[key1].Value = L"Value1";
parameter[key1].Data = L"Data1";
parameter[key2].Type = L"Type2";
parameter[key2].Value = L"Value2";
parameter[key2].Data = L"Data2";
}
Затем у меня есть простой класс-оболочка C ++, он определяет это так:
struct StructDefineInWrapper
{
const wchar_t* Type;
const wchar_t* Value;
const wchar_t* Data;
};
int GetWhatIWantWrapper(_Out_ std::map<const wchar_t*, StructDefineInWrapper>& parameter)
{
return m_object->GetWhatIWant(parameter);
}
Я попытался определить структуру вобертка как:
struct StructDefineInWrapper
{
String^ Type;
String^ Value;
String^ Data;
};
Но в ней есть ошибка: a member of non-managed class cannot be a handle.
В C # я определяю ее следующим образом:
struct StructDefineInCSharp
{
public String Type;
public String Value;
public String Data;
}
var myMap = new Dictionary<string, StructDefineInCSharp>();
wrapper.GetWhatIWantWrapper(myMap);
Но она продолжает даватьМне, например, ошибки не могут преобразовать определенную карту C # в карту C ++. Я никогда раньше не изучал C #, так что до сих пор я узнаю только о том, как распределить wstring в качестве выходного параметра (который использует String^
и StringToHGlobalUni
), но для структуры в карте я не могу найти никаких способов сделать это.