Я использую P/invoke для взаимодействия между C# и C++ в этом проекте. Я хотел бы передать структуры данных, которые определены симметрично. Какую инфраструктуру лучше всего использовать? Могут ли здесь быть полезны протокольные буферы?
Пожалуйста, предложите инфраструктуру для передачи данных между C# и C++
Ответы (2)
Я бы предложил использовать C++/CLI, поскольку вы можете использовать одни и те же файлы заголовков/файлы определений в обоих мирах. Одной из основных целей разработки C++ CLI было заполнить пробел между управляемым и неуправляемым миром. Эта статья дает вам еще больше преимуществ.
В MSDN есть хорошее описание как работает C++cli и как его можно использовать.
см. также здесь
Если это вариант, вы можете изучить использование COM. Определите классы .NET, видимые для COM и имеющие тип интерфейса ComInterfaceType.InterfaceIsDual, и украсьте каждый параметр атрибутом MarshalAs(UnmanagedType), после чего приложение C++ сможет маршалировать объекты, которые могут передаваться между управляемым и неуправляемым кодом.
«Симметричное определение» обрабатывается, потому что интерфейс определен в COM, плюс COM дает вам немного больше обработки ошибок и видимости того, что происходит, чем прямой P/Invoke.