Когда вы передаете структуру MATLAB® внешней библиотечной функции:
Каждое имя поля MATLAB должно совпадать с именем поля в определении структуры библиотеки. Имена полей являются чувствительными к регистру.
Структуры MATLAB не могут содержать поля, которые не находятся в определении структуры библиотеки.
Если структура MATLAB содержит меньше полей, чем заданный в структуре библиотеки, MATLAB обнуляет неопределенные поля.
Вы не должны совпадать с типами данных числовых полей. Функция calllib
преобразовывает в правильный числовой тип.
Чтобы определить имя и тип данных полей структуры, вы можете:
Консультируйтесь с документацией библиотеки.
Посмотрите на определение структуры в заголовочном файле библиотеки.
Используйте функцию libstruct
.
MATLAB автоматически преобразовывает структуру в определение библиотеки для того типа структуры. Для большинства случаев, таких как работа с маленькими структурами, это хорошо работает.
Однако при работе с повторными вызовами, которые передают большие структуры, преобразуйте структуру вручную прежде, чем выполнить любые вызовы к внешним функциям. Вы сохраняете время вычислений путем преобразования данных о структуре только однажды в запуске, а не в каждом вызове функции. Можно также сохранить память, если поля конвертированной структуры занимают меньше места, чем исходная структура MATLAB.
Чтобы преобразовать вручную, вызовите функцию libstruct
, чтобы создать libstruct object. Несмотря на то, что это - объект, это ведет себя как структура MATLAB. Поля объекта выведены от внешне заданного типа структуры.