将参量传递给共享的 C 库函数 | 您所在的位置:网站首页 › matlab函数传递数组 › 将参量传递给共享的 C 库函数 |
将参量传递给共享的 C 库函数C 和等效的 MATLAB 类型 共享库接口支持所有标准标量 C 类型。下表显示了这些 C 类型及其等效的 MATLAB® 类型。对于具有左列中显示的 C 类型的参量,MATLAB 使用右列中的类型。 注意 MATLAB 返回的所有标量值都是 double 类型。 MATLAB 原始类型 C 类型等效的 MATLAB 类型char, byte int8 unsigned char, byte uint8 short int16 unsigned short uint16 int int32 long (Windows®) int32, long long (Linux®) int64, long unsigned int uint32 unsigned long (Windows)uint32, long unsigned long (Linux)uint64, long float single double double char * char 数组(1×n) *char[] 字符向量元胞数组 下表显示 MATLAB 如何将 C 指针(第 1 列)映射到等效的 MATLAB 函数签名(第 2 列)。通常,您可以将等效的 MATLAB 类型列中的变量传递给具有相应参量数据类型的函数。有关何时改用 lib.pointer 对象的信息,请参阅 C 函数中的指针参量。 MATLAB 扩展类型 C 指针类型参量 数据类型等效的 MATLAB 类型Shared Library shrlibsample 中的示例函数 double * doublePtr doubleaddDoubleReffloat * singlePtr singleintsize *(整数指针类型) (u)int(size)Ptr 例如,int64 * 变为 int64Ptr。 (u)int(size)multiplyShortbyte[] int8Ptr int8char[](以空值结尾的传值字符串) cstring char 数组(1×n) stringToUpperchar **(指向字符串的指针数组) stringPtrPtr 字符向量元胞数组 enumenumPtr type ** typePtrPtr 例如,double ** 变为 doublePtrPtr。 lib.pointer 对象 allocateStructvoid * voidPtr deallocateStructvoid ** voidPtrPtr lib.pointer 对象 struct(C 样式的结构体) structureMATLAB struct addStructFieldsmxArray * MATLAB array MATLAB 数组 mxArray ** MATLAB arrayPtr lib.pointer 对象 MATLAB 如何显示函数签名以下是有关 MATLAB 函数签名中显示的输入和输出参量的注意事项。 许多参量(如 int32 和 double)都与对应的 C 参量类似。在这些情况下,请传入针对这些参量所显示的 MATLAB 类型。 某些 C 参量(例如 **double 或预定义的结构体)与标准 MATLAB 类型不同。在这些情况下,请传递标准 MATLAB 类型并让 MATLAB 来进行转换,或者您自己使用 MATLAB 函数 libstruct 和 libpointer 转换数据。有关详细信息,请参阅手动转换传递给函数的数据。 C 函数常通过按引用传递的输入参量来返回数据。MATLAB 创建其他输出参量以返回这些值。以 Ptr 或 PtrPtr 结尾的输入参量也列为输出。 有关 MATLAB 函数签名的示例,请参阅Shared Library shrlibsample。 传递参量的指导原则非标量参量必须在库函数中声明为传引用。 如果库函数使用单下标索引来引用二维矩阵,请记住,C 程序会逐行处理矩阵;MATLAB 按列处理矩阵。要从函数中获取 C 行为,请在调用函数之前转置输入矩阵,然后转置函数输出。 使用空数组 [] 将 NULL 参数传递给支持可选输入参量的库函数。此表示法仅当参量声明为 Ptr 或 PtrPtr 时才有效,如 libfunctions 或 libfunctionsview 所示。 空指针您可以通过以下方式创建 NULL 指针以传递给库函数: 传递空数组 [] 作为参量。 使用 libpointer 函数: p = libpointer; % no arguments p = libpointer('string') % string argumentp = libpointer('cstring') % pointer to a string argument使用 libstruct 函数: p = libstruct('structtype'); % structure type 空 libstruct 对象要创建空 libstruct 对象,请仅使用 structtype 参量调用 libstruct。例如: sci = libstruct('c_struct') get(sci) p1: 0 p2: 0 p3: 0MATLAB 显示初始化后的值。 手动转换传递给函数的数据在大多数情况下,MATLAB 软件会自动将传入和传出外部库函数的数据转换为外部函数期望的类型。不过,您也可以选择手动转换参量数据。例如: 将相同数据传递给一系列库函数时,请在调用第一个函数之前手动进行一次转换,而不是在每次调用时都让 MATLAB 自动转换它。该策略可以减少不必要的复制和转换操作次数。 在传递大型结构体时,通过创建与函数中使用的 C 结构体形状匹配的 MATLAB 结构体(而不是使用一般 MATLAB 结构体)来节省内存。libstruct 函数以从库中获取的 C 结构体为模型创建 MATLAB 结构体。 如果外部函数的参量使用多个引用级别(例如 double **),则请传递使用 libpointer 函数创建的指针,而不是依赖 MATLAB 来自动转换类型。 另请参阅libstruct | libpointer | libfunctions | libfunctionsview 相关示例Shared Library shrlibsample 详细信息Represent Structure Arguments in C Shared Library Functions |
CopyRight 2018-2019 实验室设备网 版权所有 |