use*_*227 3 c++ arrays dll matlab loadlibrary
我试图用C++构建一个DLL,并通过使用loadlibrary和calllib指令从MATLAB中调用它.它适用于一个值并且它正常返回一个值,但现在我试图将一个完整的数组从C++ DLL返回到MATLAB作为函数的输出.
如你所知C++通常将数组作为指针返回但是这不适用于MATLAB ...我在互联网上搜索它并且他们正在使用一些MEX功能但是不清楚......
你能解释一下如何将数组从C++ DLL calllib返回到MATLAB ,我们应该如何从C++代码中返回它?
考虑一个暴露以下C函数的DLL:
void getData(double *x, const int len)
{
for(int i=0; i<len; i++) {
x[i] = i;
}
}
Run Code Online (Sandbox Code Playgroud)
它需要一个数组已经分配了它的长度,并用增量值填充它.
在MATLAB中,首先我们加载库:
>> loadlibrary('mydll.dll', 'mydll.h')
>> libfunctions mydll -full
Functions in library mydll:
doublePtr getData(doublePtr, int32)
Run Code Online (Sandbox Code Playgroud)
要调用公开的函数,我们使用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'
Run Code Online (Sandbox Code Playgroud)
我们也可以简单地传递常规向量,MATLAB将负责编组:
>> x = calllib('mydll', 'getData', zeros(1,10), 10)
x =
0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,修改后的数组将作为输出返回(因为内置类型不会就地修改).