lib.pointer
オブジェクト全体での反復
lib.pointer オブジェクトからの cell 配列の作成
この例では、関数 getListOfStrings
の出力から、文字ベクトルからなる MATLAB® の cell 配列 mlStringArray
を作成する方法を説明します。
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
を使用し、MATLAB 配列には index
を使用します。
ptrindex = ptr; index = 1;
文字ベクトルの cell 配列 mlStringArray
を作成します。getListOfStrings
の出力をこの cell 配列にコピーします。
% 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
cell 配列の内容を表示します。
mlStringArray
mlStringArray = 1x4 cell
{'String 1'} {'String Two'} {0x0 char} {'Last string'}
構造体配列でのポインター演算の実行
この例では、ポインター演算を使用して構造体の要素にアクセスする方法を示します。例においては、shrlibsample.h
ヘッダー ファイルにある c_struct
の定義を基に、MATLAB 構造体を作成します。
定義を読み込みます。
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