Пожалуйста, предложите инфраструктуру для передачи данных между C # и C ++ - PullRequest
0 голосов
/ 18 мая 2011

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

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

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

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

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

1 голос
/ 18 мая 2011

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

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

...