В C # я определил структуру:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyObject
{
[MarshalAs(UnmanagedType.LPWStr)]
public string var1;
[MarshalAs(UnmanagedType.LPWStr)]
public string var2;
};
У меня есть эта структура в C ++:
public value struct MyObject
{
LPWSTR var1;
LPWSTR var2;
};
И в методе C ++, который является публичным классом, который нужно вызыватьиз C #:
TestingObject(MyObject^ configObject)
{
// convert configObject from managed to unmanaged.
}
Объект отлажен правильно, что я вижу две строки var1 и var2.Однако теперь проблема в том, что мне нужно преобразовать объект: configObject
в неуправляемый объект.
Я думаю о том, чтобы сделать что-то вроде этого:
TestingObject(MyObject^ configObject)
{
// convert configObject from managed to unmanaged.
MyObject unmanagedObj = (MyObject)Marshal::PtrToStructure(configObject, MyObject);
}
То естьо чем я могу думать, но, конечно, я получил эту ошибку:
Ошибка 2 ошибка C2275: «MyObject»: незаконное использование этого типа в качестве выражения
Isэто право преобразовать управляемый объект в неуправляемый объект?Если так, как я могу это правильно Marshal::PtrToStructure
?Если нет, как я могу это сделать?