c++ - 从 C++ dll 返回数组到 matlab

标签 c++ arrays matlab dll loadlibrary

<分区>

我正在尝试用 C++ 构建一个 DLL,并使用 loadlibrarycalllib 指令从 MATLAB 调用它。它适用于一个值并正常返回一个值,但现在我试图将整个数组从 C++ DLL 返回到 MATLAB 作为函数的输出。

如您所知,C++ 通常将数组作为指针返回,但这不适用于 MATLAB ... 我在互联网上搜索过,他们正在使用一些 MEX 函数,但不清楚 ...

您能解释一下如何将数组从 C++ DLL 返回到 MATLAB calllib 以及我们应该如何从 C++ 代码返回它吗?

最佳答案

考虑公开以下 C 函数的 DLL:

void getData(double *x, const int len)
{
    for(int i=0; i<len; i++) {
        x[i] = i;
    }
}

它接受一个已经分配了长度的数组,并用增量值填充它。

在 MATLAB 中,首先我们 load the library :

>> loadlibrary('mydll.dll', 'mydll.h')
>> libfunctions mydll -full

Functions in library mydll:

doublePtr getData(doublePtr, int32)

要调用公开的函数,我们使用 libpointer :

>> p = libpointer('doublePtr', zeros(1,10))  % initialize array of 10 elements
p =
libpointer
>> get(p)
       Value: [0 0 0 0 0 0 0 0 0 0]
    DataType: 'doublePtr'
>> calllib('mydll', 'getData', p, 10)        % call C function
>> get(p)
       Value: [0 1 2 3 4 5 6 7 8 9]
    DataType: 'doublePtr'

我们也可以简单地传递常规 vector ,MATLAB 将负责编码:

>> x = calllib('mydll', 'getData', zeros(1,10), 10)
x =
     0     1     2     3     4     5     6     7     8     9

注意在this case ,修改后的数组将作为输出返回(因为内置类型不会就地修改)。

关于c++ - 从 C++ dll 返回数组到 matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18559378/

相关文章:

matlab - 为什么 MATLAB 无法成功读取二进制文件?

C++宏元编程

c++ - 找到有值(value)的线程

c++ - 我正在尝试设置几个不同的多维数组,但无法弄清楚为什么这不起作用

matlab - 为什么我在 MatCont 中收到 "current step too small"错误?

algorithm - 整数线性规划 (ILP) 的运行时间复杂度是多少?

c++ - 基本c++语法的确认

C++ 使用 Windows 命名管道

php - 使用 PHP (json_encode) 将数组保存在 mysql 数据库中

javascript - 处理未格式化的数据数组