在 Matlab 中将 Win32 句柄与 DLL 一起使用



我有一台设备,我想从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,....) ?

您可以尝试以下代码来创建 MATLAB 指针:

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

若要调用 DLL 函数,请使用以下命令:

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

相关内容

  • 没有找到相关文章

最新更新