WinXP32のMatlab内から制御したい機器があります。そのAPIは、関連付けられたCヘッダーを持つDLLにパッケージ化されています。
デバイスのAPI関数は、ハードウェア記述子に依存しています。ハードウェア記述子は、Win32ハンドルによってアクセスされ、API関数によってのみ直接操作できます。製造元から提供された「foo.h」ヘッダーから:
typedef HANDLE BAR
#ifdef _DLL_EXPORT
#define _DLL_API __declspec(dllexport)
#else
#define _DLL_API __declspec(dllimport)
#endif
このハンドルは、API関数によって使用されます。API関数のCシグネチャは次の形式です。
FOO_RETURN Device_Init(BAR *pbar, DWORD parameter1, ....)
Matlabに移動して、ライブラリをロードします。
loadlibrary('foo','foo.h');
API関数がMatlabで利用できるようになりました。libfunctionsviewでは、それらの署名は次のようになります。
Name Arguments
Device_Init (voidPtr, uint32, ....)
また、loadlibraryによって作成された「foo.m」関数はそれらを次のように記述します。
fcns.name{fcnNum}='Device_Init'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}="uint32'; fcns.RHS{fcnNum}={'errorPtr, 'uint32', ...)
私の問題は、このハンドル「BAR」です。次のいずれも受け入れられません。
pbar = libpointer('BAR'); % Type was not found
pbar = libstruct('BAR'); % Undefined function or variable 'lib.BAR'
pbar = libpointer; % Segfaults when passed to DLL
このハンドル「BAR」をMatlabで作成および管理して、calllib('foo'、'command'、pbar、....)へのMatlab呼び出しで使用できるようにする方法はありますか?