У меня есть собственный тип в сборке C ++ / CLI и управляемая функция, которая принимает этот тип.
#pragma unmanaged
struct NativeStruct
{
int foo;
};
#pragma managed
#pragma make_public(NativeStruct)
void DoStuff(NativeStruct ns)
{
// ...
}
В простом C # я хочу иметь возможность создать NativeStruct
, установить foo
и передайте его DoSomething()
.Использование make_public
гарантирует, что тип является открытым и может использоваться на стороне C #.C # знает правильный размер, и я даже могу создать экземпляр.Однако C # ничего не знает о членах NativeStruct
.
// C#
void SendMessage()
{
var ns = new NativeStruct();
ns.foo = 1; // Error!
DoStuff(ns);
}
. Я могу это подтвердить, посмотрев на метаданные для NativeStruct
в VS Object Browser.Тип присутствует, но поле foo
отсутствует.
Я мог бы создать копию структуры в C #, используя StructLayoutAttribute
, но таких структур будет несколько десятков, и я быложидая, что компилятор C ++ / CLI автоматически выведет эквивалентные данные.
Есть ли способ заставить компилятор создать полное определение структуры для использования в C #?