Пожалуйста, предложите инфраструктуру для передачи данных между C# и C++

Я использую P/invoke для взаимодействия между C# и C++ в этом проекте. Я хотел бы передать структуры данных, которые определены симметрично. Какую инфраструктуру лучше всего использовать? Могут ли здесь быть полезны протокольные буферы?


person Dmitri Nesteruk    schedule 18.05.2011    source источник


Ответы (2)


Я бы предложил использовать C++/CLI, поскольку вы можете использовать одни и те же файлы заголовков/файлы определений в обоих мирах. Одной из основных целей разработки C++ CLI было заполнить пробел между управляемым и неуправляемым миром. Эта статья дает вам еще больше преимуществ.

В MSDN есть хорошее описание как работает C++cli и как его можно использовать.

см. также здесь

person schoetbi    schedule 18.05.2011

Если это вариант, вы можете изучить использование COM. Определите классы .NET, видимые для COM и имеющие тип интерфейса ComInterfaceType.InterfaceIsDual, и украсьте каждый параметр атрибутом MarshalAs(UnmanagedType), после чего приложение C++ сможет маршалировать объекты, которые могут передаваться между управляемым и неуправляемым кодом.

«Симметричное определение» обрабатывается, потому что интерфейс определен в COM, плюс COM дает вам немного больше обработки ошибок и видимости того, что происходит, чем прямой P/Invoke.

person Guy Starbuck    schedule 18.05.2011