我有一件我想在 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 函数使用,其 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('foo','command',pbar,....) 中使用?