Как загрузить C++ dll файл в Matlab

Этот ответ скорее должен быть комментарием, но комментарии не позволяют представить более сложный код ...

Джон Кугельман уже дал соответствующий ответ , но код еще может быть лучше структурирован:

if(haveSeenDecimalPoint)
// while braces are optional in given case, they still better are placed
// as the following code is pretty complex; you gain better overview
{
    if('0' <= ch && ch <= '9') // optional; ressembles closer mathematical
                               // expression 0 <= ch <= 9
                               // (which cannot be written that way in C++!)
        num++;
    else
        break;
}
// if decimal point HAS been found already, no need to check any further
// so place the else to avoid unnecessary checks (if another period occures, 
// it's already covered by breaking on ch < '0' || ch >= '9')
else if(ch == '.')
{ // due to the newly introduced else: recommendation: if one branch needs 
  // braces, place on all of them – some coding conventions even mandate
  // ALWAYS placing braces
    haveSeenDecimalPoint = true;
}

Код без комментариев:

[ 111]

Следите за дополнительными помещениями, они также улучшают читаемость.

7
задан Amro 18 October 2011 в 18:38
поделиться

3 ответа

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

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

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

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

4
ответ дан 7 December 2019 в 12:25
поделиться

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

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

1
ответ дан 7 December 2019 в 12:25
поделиться

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


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

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

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

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


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

0
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: