Экспорт определения нативной структуры в управляемый код - PullRequest
0 голосов
/ 12 мая 2019

У меня есть собственный тип в сборке 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 #?

...