主要内容

代表着C共享库函数指针参数

在C函数指针参数

许多功能在外部库以引用的方式传递参数。当你经过参考,你通过指针的价值。在函数签名,指针参数有名字的结局PtrPtrPtr。尽管MATLAB®不支持按引用传递,万博1manbetx您可以创建一个MATLAB参数,称为lib.pointer对象,这是兼容C指针。这个对象的一个实例MATLABlib.pointer类。

通常,您可以简单地通过MATLAB变量(按值传递参数),即使该函数的签名声明的参数是一个指针。有时,然而,当它通过是很有用的lib.pointer

  • 你想修改数据的输入参数。

  • 你是通过大量的数据,你想控制MATLAB数据的复制。

  • 库存储和使用指针,所以你想要的MATLAB函数控制的生命周期lib.pointer对象。

把字符串为空指针

C代表人物8位整数。使用MATLAB字符数组作为输入参数,将字符串转换为适当的类型和创建一个voidPtr。例如:

str =字符串变量的;vp = libpointer (“voidPtr”[int8 (str) 0]);

的语法[int8 (str) 0]创建一个以null结尾的字符串所需的C函数。读取字符串,并验证指针类型,输入:

char (vp.Value) vp.DataType
ans =字符串变量ans = voidPtr

通过MATLAB自动转换参数值为一个参数通过引用传递时,外部函数原型定义了参数是一个指针。调用一个函数,接受一个voidPtr一个字符串作为输入参数使用以下语法。

func_name([int8 (str) 0])

尽管MATLAB将参数的值转换为一个指针,它必须是正确的类型。

内存分配外部库

一般来说,MATLAB通过一个有效的内存地址每次通过一个变量库函数。使用一个lib.pointer对象的情况下图书馆存储并访问缓冲区的指针。在这些情况下,确保MATLAB控制缓冲区的寿命,防止数据的副本。以下伪代码是一个异步数据采集的例子,展示了如何使用lib.pointer在这种情况下。

假设外部库myLib具有以下功能:

AcquireData (int点,短*缓冲)IsAquisitionDone(空白)

在哪里缓冲声明如下:

短的缓冲[99]

首先,创建一个lib.pointer99点的数组:

BufferSize = 99;pbuf = libpointer (int16Ptr, 0 (BufferSize 1));

然后,开始在一个循环中获取数据,并等待,直到它完成:

calllib (“myLib”、“AcquireData BufferSize, pbuf), (~ calllib (myLib " IsAcquisitionDone)暂停(0.1)

下面的语句读取缓冲区中的数据:

结果= pBuffer.Value;

当库完成了缓冲区,清晰的MATLAB变量:

清晰的pbuf

另请参阅