描述:
客户程序的对话框有三个文本框,接受用户输入整数变量a,b,c的值:
程序如下(一部分,用C简单写)
unsigned char ***m;
m=(unsigned char ***)malloc(a*b*c);
for(i=0;i<a;i++)
for(j=0;j<b;j++)
for(k=0;k<c;k++)
m[i][j][k]=读入值
调用:f(m); //f为客户程序的一函数,对m进行处理。
现在我想把f函数改成用DCOM实现,即改为DCOM中的一个方法,注册到另一台机子,实现远程调用。
1,我直接在DCOM的接口方法中定义:
HRESULT f([in,out]long ***m); //这种方法发现数据根本没能传输,客户端调用f(m)出错。
2,我把a,b,c固定掉,如a=b=c=100;
客户定义:m2[a][b][c],
for(i=0;i<a;i++)
for(j=0;j<b;j++)
for(k=0;k<c;k++)
m2[i][j][k]=m[i][j][k]; f(m2);//调用
DCOM中定义方法:
STDMETHODIMP Cpp25::f( long m[100][100][100])
这种方法可以实现,但是a,b,c是固定值的。
各位大哥大姐,我该怎样定义f(long.....),才能处理a,b,c是变化的问题?????
是用指针传递,还是有什么方法定义动态数组???dcom方法中数组参数好像都要是固定大小的,
可不可以在 dcom中定义方法:
STDMETHODIMP Cpp25::f( long m[a][b][c]) //其中a,b,c是由客户端传递过来的,不确定性的???
解决方案1:
HRESULT proc ([in] short m, [in] short n, [size_is (m, n), in, out] short **ppshort);
xstring(麻雀) 说得对,这样做可以保证传递的参数是动态变化的!
HRESULT proc ([in] short m, [in] short n, [size_is (m, n), in, out] short **ppshort);
以上ppshort是一个长度为m的数组,其中每个元素是一个short *,每个short *又是一个长度为n的short数组。
所以你的可以写成
HRESULT f ([in] short a, [in] short b, [in] short c,
[size_is (a, b, c), in, out] long ***m);
这样
m是一个长度为a的long **数组, m [x]中是一个long **
m [x]是一个长度为b的long *数组,m [x] [y]是一个long **指针
m [x] [y]是一个长度为c的long数组, m[x] [y]是一个long *指针
m [x] [y] [z] 中是一个long