Этот ответ скорее должен быть комментарием, но комментарии не позволяют представить более сложный код ...
Джон Кугельман уже дал соответствующий ответ , но код еще может быть лучше структурирован:
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]
Следите за дополнительными помещениями, они также улучшают читаемость.
loadlibrary должен работать. Я использую все это время для вызывания функций от dlls, записанного в C++ с обертками C.
Какие ошибки Вы получаете, когда Вы пытаетесь использовать loadlibrary?
Удостоверьтесь, что экспортируемые функции dll являются функциями C, не функциями C++. В противном случае затем запишите обертки C.
Больше информации о точно, что Вы делаете при использовании loadlibrary, было бы полезно.
Как упомянуто другими, необходимо сначала перенести библиотеку C++ как библиотека C - MathWorks раньше советовал для не использования кода C++ непосредственно в mex (dlopening, ядро C++ непосредственно является сложным), возможно, это все еще верно.
Ваше описание довольно неясно, также: то, что делает Вы подразумеваете "mex, находит вещь Linux", но это не работает. Высказывание, что это не работает, не полезно: точные команды и сообщение об ошибке.
Вы могли пойти для подхода 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 был бы легче.