Разница между C ++ MEX и C MEX - PullRequest
0 голосов
/ 22 мая 2018

Я написал TCPIP-сокет-соединение с сервером и клиентом на C ++, который прекрасно работает в VisualStudio.Теперь я хочу использовать клиент C ++ в MATLAB / Simulink через MEX-файлы, а затем в S-функции.Я нашел два описания о MEX-файлах.

  1. C ++ MEX File Application Только для C ++
  2. C / C ++ MEX файлов C / C ++

Теперь я запутался, какой из них взять.Я написал несколько простых программ со вторым, но всегда сталкивался с проблемами с типами данных.Я думаю, это потому, что приведенные примеры и функции предназначены только для C, а не для C ++.

Я ценю любую помощь!Большое спасибо!

1 Ответ

0 голосов
/ 22 мая 2018

Различия:

  1. Интерфейс C, описанный во второй ссылке , намного, намного старше (я использовал этот интерфейс очень давнов 1998 году).С помощью этого интерфейса вы можете создать MEX-файл и запустить его на большом наборе различных версий MATLAB.Вы можете использовать его как из C, так и из кода C ++.

  2. Интерфейс только для C ++, описанный в первой ссылке , является новым в MATLAB R2018a (классы C ++ дляманипуляции с массивами MATLAB были введены в R2017b, но возможность записи MEX-файла была новой в R2018a).MEX-файлы, которые вы пишете с помощью этого интерфейса, не будут работать в предыдущих версиях MATLAB.

    Кроме того, этот интерфейс (наконец-то!) Позволяет создавать копии общих данных, операции на месте и т. Д.просили много лет, но они не хотели вставлять старый интерфейс C, потому что боялись, что это будет слишком сложно для обычного писателя MEX-файла).

Еще одно изменение, о котором следует знать:

В R2018a MATLAB также изменил способ хранения сложных массивов в памяти.В более старых версиях MATLAB реальные и мнимые компоненты хранятся в отдельных блоках памяти.В R2018a и далее они хранятся в том же блоке памяти, что и вы, вероятно, используете в своем собственном коде.

Это влияет на MEX-файлы !Если ваш MEX-файл использует сложные данные, он должен читать и записывать их так, как MATLAB хранит их.Если вы запустите MEX-файл, скомпилированный для более старой версии MATLAB, или скомпилируете MEX-файл, используя текущие параметры сборки по умолчанию в R2018a, сложный массив будет скопирован в старую модель хранения перед передачей в MEX-файл.Новый параметр компиляции для команды mex, -R2018a, создает MEX-файлы, которые передают данные в новой модели хранения без изменений.Но эти MEX-файлы не будут совместимы с предыдущими версиями MATLAB.

Как выбрать?

  • Если вам нужны ваши MEX-файлыдля запуска на версиях MATLAB до новейшего R2018a, используйте старый интерфейс C, у вас нет выбора.

  • Если вы хотите программировать на C, используйте старый Cинтерфейс.

  • Если вам нужно использовать сложные данные, а не хотите нести расходы на копию , вам нужно ориентироваться на R2018a и новее, иR2017b и старше, отдельно.Вам нужно написать отдельный код для этих двух «платформ».Более старые версии могут быть предназначены только для интерфейса C.Для более новых версий вы можете использовать любой интерфейс.

  • Если вы цените преимущества современного C ++ и хотели бы воспользоваться ими и ориентированы только на последнюю и лучшую версию MATLAB,затем используйте новый интерфейс C ++.Я еще не пробовал это, но из документации это выглядит очень хорошо разработанным.

...