MATLAB® интерфейс общей библиотеки поддерживает только стандартные программы библиотеки на C. Большинство профессионально написанных библиотек, предназначенных для использования несколькими языками и платформами, работают хорошо. Для получения дополнительной информации см. раздел «Вызов функций C в общих библиотеках».
Многие некоммерческие библиотеки или библиотеки, которые были протестированы только с C++, имеют интерфейсы, которые не могут использоваться и требуют изменения или слоя интерфейса. В этом случае рекомендуем использовать файлы MEX.
Интерфейс общей библиотеки не поддерживает классы C++ или перегруженные элементы функций. Вместо этого используйте интерфейс MATLAB C++. Для получения дополнительной информации см. раздел «Библиотеки C++» в MATLAB.
printf
ФункцияMATLAB не отображает выходы printf
C функцию в командном окне.
Вы можете изменить объявление поля бита с помощью типа int
или эквивалентный. Например, если ваша библиотека имеет следующее объявленное в ее заголовочном файле:
int myfunction(); struct mystructure { /* note the sum of fields bits */ unsigned field1 :4; unsigned field2 :4; };
отредактировать заголовочный файл и заменить его на:
int myfunction(); struct mystructure { /* field 8 bits wide to be manipulated in MATLAB */ /* A char is 8 bits on all supported platforms */ char allfields; };
После редактирования исходного кода перестроите библиотеку. Затем можно получить доступ к данным в двух полях с помощью битовой маскировки в MATLAB.
char
определения для enum
не поддерживаются. На C, a char
константа, для примера 'A'
, автоматически преобразуется в его численный эквивалент (65). MATLAB не преобразует константы. Как использовать этот тип enum
, отредактируйте заголовочный файл путем замены 'A'
с числом 65 (int8('A') == 65
). Для примера замените:
enum Enum1 {ValA='A',ValB='B'};
с:
enum Enum1 {ValA=65,ValB=66};
затем перестроите библиотеку.
Объединения не поддерживаются. В качестве обходного пути измените исходный код, вытеснив union
декларирование и замена его самой крупной альтернативой. Затем, чтобы интерпретировать результаты, запишите код MATLAB по мере необходимости. Например, отредактируйте исходный код и замените следующее объединение:
struct mystruct { union { struct {char byte1,byte2;}; short word; }; };
с:
struct mystruct { short word; };
где на маленькой эндовой машине, byte1
является mod(f,256)
, byte2
является f/256
, и word=byte2*256+byte1
. После редактирования исходного кода перестроите библиотеку.
Заголовочные файлы должны быть совместимы с поддерживаемыми компиляторами на платформе. Обновленный список поддерживаемых компиляторов см. в Поддерживаемые и совместимые компиляторы. Вы не можете загружать внешние библиотеки с явными зависимостями от других компиляторов.
Интерфейс общей библиотеки не поддерживает функции библиотеки, которые работают с указателями на функции.
Ограниченная поддержка многоуровневых указателей и структур, содержащих указатели. Использование входных и выходных параметров и представителей структуры, объявленных с более чем двумя уровнями косвенности, не поддерживается. Для примера, double ***outp
переведен в doublePtrPtrPtr
не поддерживается.
Интерфейс общей библиотеки не поддерживает функции библиотеки с переменным количеством аргументов, представленных многоточием (...
).
Можно создать несколько функций псевдонима в файле прототипа, по одному для каждого набора аргументов, используемых для вызова функции. Для получения дополнительной информации см. MATLAB Файлы прототипа.