2012-06-27 55 views
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 ,....)?

回答

0

你可以試試這個代碼來創建MATLAB指針:

pbar = libpointer('voidPtr',[ uint8('some string') 0]) 
pparameter1 = libpointer('uint32',0) 

,並打電話給你的DLL函數使用以下命令:

calllib('foo','Device_Init',pbar,pparameter1,...)