将数组从c ++ dll返回到matlab

时间:2013-09-01 14:29:17

标签: c++ arrays matlab dll loadlibrary

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

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

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

1 个答案:

答案 0 :(得分:5)

考虑暴露以下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'

我们也可以简单地传递常规向量,MATLAB将负责编组:

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

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