我需要写一个dll如下
- C/C++ code
#include "stdafx.h"#include <string.h>#include "myCorr_C.h"#include "mex.h"#define TESTAPI extern "C" __declspec( dllexport ) int _tmain(int argc, _TCHAR* argv[]){ return 0;}struct DataStruct{ double** data; double* qoe;};struct ContributionStruct{ double* contribution;};TESTAPI int init(){ if(!mycorr_CInitialize()){ return -1; }}TESTAPI ContributionStruct* qoc_add(DataStruct* dataStruct){ [color=#FF0000]dataStruct->data[0];//这里我需要从dataStruct中获取到data数组和qoe数组,并且还要将一个新的double数组写入到ContirbutionStruct中的contributin的double数组中,这里数组都是用指针来声明,没有用[],需要求助下,如何对这个DataStruct* 中的2个double数组进行取值赋值操作,比如获取到data数组的长度,一次获取到double数组中的每一个数等[/color] mxArray *argX=mxCreateDoubleMatrix(3,3,mxREAL); double data[9] ={-1.5,4,-3,1,2,2,2,3,8}; double qoe[3] = {3,5,6}; double contribution[3]; mxArray *argY=mxCreateDoubleMatrix(3,1,mxREAL); memcpy(mxGetPr(argX),data,9*sizeof(double)); memcpy(mxGetPr(argY),qoe,3*sizeof(double)); mxArray *coef = NULL; //memcpy(mxGetPr(X),x,9*sizeof(double)); mlfMycorr(1, &coef, argX, argY); double *resultP; resultP=mxGetPr(coef); for(int i=0;i<3;i++){ contribution[i]=*(resultP+i); } mxDestroyArray(argX); mxDestroyArray(argY); mxDestroyArray(coef); return 0;}TESTAPI int destroy(){ mycorr_CTerminate(); return 0;}
------解决方案--------------------------------------------------------
二维数组的初始化只能省略第一维的数组大小,不能省略第二维的数组大小
不然只知道指向二维数组的指针是如何也不能确定二维数组的维数
------解决方案--------------------------------------------------------
最好将数组维数作为参数传递进去,否则指针很难办。也可以用&传递引用过去
------解决方案--------------------------------------------------------
没看明白你的问题。二维数组指针这样定义:
double (*a)[N]; // N为常数,a即二维数组指针变量。
函数间传递多维数组时,有时不能固定数组的大小,这是可以把多维数组当作一维数组来传递,在使用时根据数组大小参数计算下标的值。例如:
int a[3][2];
int* p = &a[0][0];
p[0]即a[0][0],
p[1]即a[0][1],
p[2]即a[1][0],
p[3]即a[1][1],
p[4]即a[2][0],
p[5]即a[2][1]。
------解决方案--------------------------------------------------------
用两个&
------解决方案--------------------------------------------------------
我建议你去看看C语言中的指针这部分内容!看懂了,这些就不是问题咯~~
------解决方案--------------------------------------------------------
指针数组,或者是传数组的地址都可以吧
------解决方案--------------------------------------------------------
很多人认为指向二维数组的指针就是**,其实是错误的,**是指向指针变量(或指针数组)的指针,二维数组指针的定义方法是double (*a)[N]这种形式。
你目前的应用情况比较复杂,建议你先做个测试程序,在java中把数组初始化为特定的数据,然后调试看一下传递过来的地址里面是什么形式,如何对应的,然后再考虑取数据的方法。