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

MATLAB поддерживает стандартные программы библиотеки C

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

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

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

Интерфейс общей библиотеки не поддерживает классы 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 Файлы прототипа.

Похожие темы