У меня есть собственное приложение, для которого я пишу графический интерфейс WPF, для которого два отдельных процесса взаимодействуют через канал.Я хочу определить единый набор структур, которые будут передаваться по каналу и использоваться как собственными, так и управляемыми приложениями.На самом базовом уровне это выглядит так:
// gui_protocol.h (C++ App)
struct Foo
{
int bar;
}
// gui_interop.cpp (C++/CLI Middle Layer)
#include "gui_protocol.h"
#pragma make_public(Foo)
// gui.cs (C# WPF GUI)
Foo foo = new Foo();
foo.bar = 2; // This doesn't work!
Проблема в том, что последняя строка.Поля Foo не видны приложению C #.Похоже, маркировка структуры public создает только информацию об имени и размере, а не об участниках.Вот что показывают метаданные:
Эти структуры предназначены для простых старых данных, и я не ожидаю необходимости маршалинга.Я знаю, что могу написать эквивалентную структуру в управляемом коде, используя StructLayout
и тому подобное, но я бы хотел избежать дублирования определений, которые могут привести к несоответствиям.
Вопрос: Есть ли способ использовать эти нативные структуры без необходимости переопределять их на управляемой стороне?