Main Content

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