exponenta event banner

Ограничения поддержки общих библиотек

MATLAB поддерживает процедуры библиотеки C

Интерфейс общей библиотеки MATLAB ® поддерживает только процедуры библиотеки C. Большинство профессионально написанных библиотек, предназначенных для использования на нескольких языках и платформах, работают нормально. Дополнительные сведения см. в разделе Функции вызова C в общих библиотеках.

Многие некоммерческие библиотеки или библиотеки, которые были протестированы только с C++, имеют интерфейсы, которые не используются и требуют изменения или уровня интерфейса. В этом случае рекомендуется использовать файлы MEX.

Загрузка библиотек C++

Интерфейс общей библиотеки не поддерживает классы C++ или перегруженные элементы функций. Вместо этого используйте интерфейс MATLAB C++. Дополнительные сведения см. в разделе Библиотеки C++ в MATLAB.

Ограничения при использовании printf Функция

MATLAB не отображает выходной сигнал C printf в командное окно.

Битовые поля

Можно изменить объявление битового поля с помощью типа 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;
};

где на машине на основе little-endian, byte1 является mod(f,256), byte2 является f/256, и word=byte2*256+byte1. После редактирования исходного кода восстановите библиотеку.

Зависимости компилятора

Заголовочные файлы должны быть совместимы с поддерживаемыми компиляторами на платформе. Обновленный список поддерживаемых компиляторов см. в разделе Поддерживаемые и совместимые компиляторы. Нельзя загружать внешние библиотеки с явными зависимостями на другие компиляторы.

Ограничения при использовании указателей

Указатели функций

Интерфейс общей библиотеки не поддерживает библиотечные функции, работающие с указателями функций.

Многоуровневые указатели

Ограниченная поддержка многоуровневых указателей и структур, содержащих указатели. Использование входов и выходов и элементов структуры, объявленных с более чем двумя уровнями косвенности, не поддерживается. Например, double ***outp переведено в doublePtrPtrPtr не поддерживается.

Функции с переменным числом входных аргументов не поддерживаются

Интерфейс общей библиотеки не поддерживает библиотечные функции с переменным числом аргументов, представленных многоточием (...).

В файле прототипа можно создать несколько функций псевдонима, по одной для каждого набора аргументов, используемых для вызова функции. Дополнительные сведения см. в разделе Файлы прототипов MATLAB.

Связанные темы