代表着C共享库函数指针参数
在C函数指针参数
许多功能在外部库以引用的方式传递参数。当你经过参考,你通过指针的价值。在函数签名,指针参数有名字的结局Ptr
和PtrPtr
。尽管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.pointer
99点的数组:
BufferSize = 99;pbuf = libpointer (int16Ptr, 0 (BufferSize 1));
然后,开始在一个循环中获取数据,并等待,直到它完成:
calllib (“myLib”、“AcquireData BufferSize, pbuf), (~ calllib (myLib " IsAcquisitionDone)暂停(0.1)
下面的语句读取缓冲区中的数据:
结果= pBuffer.Value;
当库完成了缓冲区,清晰的MATLAB变量:
清晰的pbuf