Как загрузить файл dll c ++ в Matlab - PullRequest
7 голосов
/ 19 февраля 2009

У меня есть файл C ++ dll, который использует множество других библиотек c ++ (IPP, Opencv +++), которые мне нужно загрузить в matlab. Как я могу это сделать?

Я пробовал loadlibrary и mex. Библиотека загрузки не работает.

Мекс находит вещи linux (независимая от платформы библиотека) и пытается включить их. И это не работает.

У кого-нибудь есть хорошие идеи?

Ответы [ 3 ]

4 голосов
/ 19 февраля 2009

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

Какие ошибки вы получаете, когда пытаетесь использовать loadlibrary?

Убедитесь, что экспортируемые функции dll являются функциями C, а не функциями C ++. Если нет, то напишите C обертки.

Было бы полезно получить дополнительную информацию о том, что именно вы делаете при использовании loadlibrary.

1 голос
/ 19 февраля 2009

Как уже упоминалось другими, вы должны сначала обернуть свою библиотеку C ++ как библиотеку C - математические приемы, используемые для того, чтобы не использовать код C ++ непосредственно в mex (сложное развертывание ядра C ++ напрямую), возможно, это все еще верно.

Ваше описание также довольно неясно: что вы подразумеваете под "mex находит вещь linux", но это не работает. Сказать, что это не работает, бесполезно: точные команды и сообщения об ошибках.

0 голосов
/ 19 февраля 2009

Вы можете пойти на подход Java (поскольку Matlab работает на JRE и может обращаться к объектам / методам Java - просто имейте в виду, что JRE Matlab не так современна, как последняя JRE, тот, который я использую, использует Java 1.5) и использует JNA для доступа к вашей DLL.


Или, если вы написали DLL верхнего уровня, вы могли бы пойти на подход COM / ActiveX.

Я добился больших успехов, создав интерфейс для моих функций C ++ в виде библиотек COM / ActiveX - вам не нужно беспокоиться об этом .h.

См. Руководство Внешние интерфейсы о COM-клиентах, в частности, о управлении / преобразовании данных.

Было бы дополнительной работой добавить слой COM / ActiveX, но это сделало бы вашу библиотеку более переносимой в мире Windows и, вероятно, более удобной для использования в MATLAB.


Если у вас много вызовов функций для вашей DLL, подход COM / ActiveX может быть быстрее (не уверен), но в противном случае я думаю, что подход JNA будет проще.

...