lib.pointer
ОбъектВ этом примере показано, как создать массив ячеек из символьных векторов MATLAB®, mlStringArray
, от выхода getListOfStrings
функция.
Загрузите shrlibsample
библиотека.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Вызовите getListOfStrings
функция, чтобы создать массив векторов символов. Функция возвращает указатель на массив.
ptr = calllib('shrlibsample','getListOfStrings'); class(ptr)
ans = 'lib.pointer'
Создайте переменные индексации, чтобы выполнить итерации через массивы. Используйте ptrindex
для массива, возвращенного функцией и index
для массива MATLAB.
ptrindex = ptr; index = 1;
Создайте массив ячеек из символьных векторов mlStringArray
. Скопируйте выход getListOfStrings
к массиву ячеек.
% read until end of list (NULL) while ischar(ptrindex.value{1}) mlStringArray{index} = ptrindex.value{1}; % increment pointer ptrindex = ptrindex + 1; % increment array index index = index + 1; end
Просмотрите содержимое массива ячеек.
mlStringArray
mlStringArray = 1x4 cell
{'String 1'} {'String Two'} {0x0 char} {'Last string'}
В этом примере показано, как использовать адресную арифметику с указателями, чтобы получить доступ к элементам структуры. Пример создает структуру MATLAB, на основе c_struct
определение в shrlibsample.h
заголовочный файл.
Загрузите определение.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Создайте структуру MATLAB.
s = struct('p1',{1,2,3},'p2',{1.1,2.2,3.3},'p3',{0});
Создайте указатель на структуру.
sptr = libpointer('c_struct',s);
Считайте значения первого элемента.
v1 = sptr.Value
v1 = struct with fields:
p1: 1
p2: 1
p3: 0
Считайте значения следующего элемента путем постепенного увеличения указателя.
sptr = sptr + 1; v2 = sptr.Value
v2 = struct with fields:
p1: 2
p2: 2
p3: 0