2012-06-27 44 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,...)