2009-12-22 7 views
3

У меня есть набор определений структур, которые используются как управляемыми компонентами C#, так и неуправляемыми компонентами C/C++. В настоящее время идентичные определения структур существуют отдельно в коде C/C++ и C#, что приводит к дублированию и связанному с ними хаосу. Каков наилучший способ поддерживать отдельные определения, которые можно использовать как с C#, так и с C/C++? Спасибо! AmitОбщие общие определения в C/C++ (неуправляемый) и управляемый код C#

P.S .: Я парень C/C++, поэтому, если есть очевидный способ сделать это, возможно, я пропустил его полностью!

ответ

1

вам нужен IDL (интерфейс языка определения) попробовать прибегая к помощи:

  1. буферов протокола.
  2. ICE (интернет коммуникация двигатель).
  3. Возможно, Microsoft COM?.
  4. --edit: новая запись - похоже, у Microsoft есть IDL compiler.

Все зависит от того, что вы хотите. все вышеперечисленные технологии имеют для них IDL-элемент и поставляются с собственным набором багажа. Я лично остался бы на низком уровне C/C++: D. Итак, я бы использовал Google «Imatix GSL» и использовал указанную технологию для моделирования проблемы в XML и создания структур данных на любом языке программирования - эта технология очень проста и тонкая и требует опытного программиста, поэтому, т. е. вы должны придерживаться IDL.

- редактирование: технология программирования -

Вы можете решить эту проблему с помощью чистой техники, если вам нравится. Хаос возникает, когда строгание техники ломается. Если вы принимаете решение о брандмауэре и инкапсулируете проблему в чистый код на C/C++, вам не придется беспокоиться о падении интерфейса в зависимом от вас коде - это потому, что любой полезный язык может взаимодействовать с ABI вашей платформы (простые C-функции: P). Суть заключается не в том, чтобы подвергать внутренности, а просто интерфейс с непрозрачными типами, например числовые дескрипторы, которые представляют объекты и функции, которые могут выполняться на ваших типах.

3

Я не знаком с вашим проектом (-ами), очевидно, но вы подумали о создании управляемого моста для вашей библиотеки в C++/CLI? С хакером «It Just Works» компилятор C++/CLI делает для вас много раз, вы сможете маршалировать и обмениваться управляемыми типами с помощью собственного кода и обратно и вперед.

Опять же, я не знаю, подходит ли оно для вас без особых подробностей, но, возможно, стоит заглянуть в него.

1

Я когда-то хотел сделать это в одном из моих проектов, который имел жесткое разделение между кодом C# и кодом C.В идеале, C# код будет позаимствовали заголовочные файлы из кода C, но:

  • поскольку C# не поддерживает включать, я не вижу, как вы могли бы поделиться определение структуры и включить его как в вашем C# или C/C++ код
  • иметь мои определения структуры в отдельных заголовков не было все равно удобно
  • я не хочу полагаться на IDL или обычая «разобрать C заголовки и только извлекать структуры определения» Preprocessing шаг