gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:32:00 25 4
gpt4 key购买 nike

我必须从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com