2013-12-02 2 views
2

У меня есть проблема управления, которую я решил с помощью интеллектуального контроля модели (MPC). Я задал проблему в MATLAB и использовал FORCES http://forces.ethz.ch/ для ее решения. FORCES - это веб-сервис от ETH Zürich, который генерирует бесплатный ANSI-C код без библиотеки. Для тестирования кода они предоставляют скрипт для компиляции c-кода в файл MATLAB .mex. Все это прекрасно работает.Создание библиотеки dll из сгенерированного кода c

Теперь я хочу использовать эту функцию в моей программе Windows Forms C#. Чтобы использовать C-код в C#, я должен скомпилировать c-код в dll, а затем использовать P/Invoke? Или есть другой способ? Как я могу скомпилировать его? Могу ли я просто использовать код, как есть, или мне нужно его отредактировать (добавив __declspec или что-то в этом роде)? Можно ли скомпилировать dll непосредственно из MATLAB?

Файлы .c и .h можно найти на моей домашней странице: http://n.ethz.ch/~rehofman/download/.

Я бегу 64bit Windows 7, MATLAB 2013b, Visual Studio 2012.

У меня есть MinGW уже установлены, если это необходимо.

EDIT:

Ok здесь более конкретный вопрос: У меня есть функция (myMPC_solve), написанная на с-кодом, который я хочу, чтобы позвонить из C#. Каков наилучший способ сделать это? Аргументы и типы данных находятся в файле .h.

+0

PInvoke - единственный способ. – Bauss

+1

Вы задали много вопросов в этом посте, много способов ответить на некоторые из них, но в отношении них: _Как я могу скомпилировать его? _, *** [ЗДЕСЬ] (http://www.mingw.org/wiki/sampleDLL) *** - это ссылка, показывающая, как вы можете скомпилировать. Что касается _P/Invoke_, то существует много *** [других ссылок] (http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx) *** (здесь один), показывающий, как использовать стандартную DLL (или как Microsoft называет ее _unmanaged code_) – ryyker

+0

Кстати, ваш вопрос интересен, и он показывает, что вы сделали какую-то работу, но кому-то будет очень непросто помочь ответьте на ваши вопросы, потому что они довольно широкие, а не самодостаточны. взгляните на эту ссылку в отношении этих комментариев: *** [SSCCE] (http://sscce.org/) *** – ryyker

ответ

0

Вы могли бы сделать какие-либо одно из следующих действий:

  1. Скомпилировать C к DLL, и включить его с помощью P/Invoke.
  2. Скомпилируйте код C в сборку смешанного режима C + +/CLI, оберните функциональность в классе ref и используйте это из C#
  3. Оберните код C на COM-сервер и используйте его с C#.
  4. Оставьте код в MATLAB и используйте его с C#. Существует несколько способов использования кода MATLAB кодом C#.

И я уверен, что есть другие варианты помимо вышеперечисленного.

Теперь, если вы надеетесь на подробное пошаговое руководство, что делать дальше, я сожалею, что разочаровал вас. Вы задали широкий вопрос, и я дал вам широкий ответ. Далее вы должны выбрать один из вышеперечисленных вариантов и реализовать его. Когда вы застряли, не стесняйтесь задавать более конкретный вопрос.

+0

Я решил использовать его с помощью SWIG. – user3005031

Смежные вопросы