Я работаю над переносом некоторого кода C ++ на управляемый .NET. Мне нужно будет сохранить некоторый код C ++ в нативном виде и пытаться использовать подход IJW к нему. Я знаю, что можно объявить неуправляемую структуру, чтобы она правильно маршалировалась в код .NET, но компилятор C ++, похоже, этого не делает.
Например, у меня есть этот код (управляемый):
struct MyStruct
{
int some_int;
long some_long;
};
public ref class Class1
{
static MyStruct GetMyStruct()
{
MyStruct x = { 1, 1 };
return x;
}
};
Он компилируется, но когда я смотрю на него с помощью рефлектора, код выглядит так:
public class Class1
{
// Methods
private static unsafe MyStruct GetMyStruct()
{
MyStruct x;
*((int*) &x) = 1;
*((int*) (&x + 4)) = 1;
return x;
}
}
[StructLayout(LayoutKind.Sequential, Size=8), NativeCppClass,
MiscellaneousBits(0x41), DebugInfoInPDB]
internal struct
{
}
По сути, никакие поля в MyStruct не видны .NET. Есть ли способ сказать компилятору C ++ генерировать их?
При ответе, пожалуйста, учтите следующее: : Я знаю, как создать управляемый класс, который мог бы быть видимым для .NET Framework. Я НЕ заинтересован в этом. Я хочу, чтобы компилятор C ++ объявлял неуправляемую структуру таким образом, чтобы .NET это понимал, что-то вроде:
[StructLayout(LayoutKind::Sequential, blablabla ... )]
struct MyStruct
{
[MarshalAs ....... ]
System::Int32 some_int;
[MarshalAs ....... ]
System::Int32 some_long;
};