c - 如何将两个参数及其大小传递给 Matlab 中的 C 函数?

标签 c matlab

我必须从 Matlab 中调用以下 C 库函数:

bool PI_OAD (int ID, const int* channel, const double* pdValueArray, int iArraySize)

并且参数 iArraySize 应该是数组 channel 和 pdValueArray 的大小。

参数channel和pdValueArray给出如下:

pChannel = uint8(channel);
pStep = uint16(step);

我的 calllib 命令是:

calllib(Controller, 'PI_OAD', ID, pChannel, pStep, int32(24));

它不起作用。

我不知道如何正确传递参数 channel 的大小和步长。有人有想法吗??谢谢!

编辑: 感谢您提供的所有答案,我会在下周二回到工作岗位时尝试您的建议。

一些附加信息:

我需要函数 PI_OAD 来通过硬件接口(interface)操作压电元件, channel 最多时间为 1,因为我只有一个轴,step 是我想在压电元件上设置的电压。

它不起作用意味着我从界面中得到了一些错误。据我所知,我得到一个“命令太长”,然后是一个“未知命令”错误。

最佳答案

您的代码中有一些错误:

  • channel 声明为 int *,而您传递的是 uint8
  • 数组
  • pdValueArray 声明为 double *,而您传递 uint16

因此传递大小不是您的问题 - 传递其他变量才是。

这是我写的一个简单的dll:

int PI_OAD (int ID, const int* channel, const double* pdValueArray, int iArraySize){
  int i; 
  mexPrintf("ID %d, size %d\n", ID, iArraySize);
  for(i=0; i<iArraySize; i++)
    mexPrintf("%lf ", pdValueArray[i]);
}

这是我在 MATLAB 中调用它的方式

lib = loadlibrary('libtestlib.so','testlib.h');

ID=int32(10);
pChannel = int32([1:10]);
pStep = double([1:10]);
calllib('libtestlib', 'PI_OAD', ID, pChannel, pStep, int32(numel(pChannel)));

unloadlibrary('libtestlib');

这是输出

ID 10, size 10
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 

一切正常!

关于c - 如何将两个参数及其大小传递给 Matlab 中的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508050/

相关文章:

c - 四舍五入整数以始终以 0 结尾

c - fork 进程执行休眠

java - 在 Java 中运行 m 文件

string - 动态结构引用的参数必须评估为有效的字段名称

c - C 中的 Matlab 引擎函数返回零

matlab - 如何将 MATLAB 命令行窗口的内容保存到文件中?

c - 为什么不外部链接到静态变量?

c++ - 我的多线程程序在双核机器上运行缓慢或出现死锁,请帮忙

c - IOCTL:HDIO_GET_IDENTITY 的参数无效

loops - MATLAB 中的复制求和运算符