作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须从 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/
我是一名优秀的程序员,十分优秀!