0
我有一個設備,我想從Matlab內控制WinXP32。它的API封裝在一個帶有關聯C頭的DLL中。在Matlab中使用DLL處理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函數,的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
有沒有一種方法來創建和管理在Matlab這個句柄「BAR」,以便它可以在Matlab使用調用calllib(「富」,「命令」,PBAR ,....)?