向COM传递多维数组的问题

wj_yhl 2009-04-22 08:07:31
VARIANT Picsize;
VariantInit(&Picsize);
Picsize.vt=VT_R8|VT_ARRAY;
double figsize[16][16]={{0.0,0.0},{0,0}};
SAFEARRAYBOUND rgabound[16];
rgabound[0].cElements=16; //数组所含元素数
rgabound[0].lLbound=0; //数组上界
rgabound[1].cElements=16; //数组所含元素数
rgabound[1].lLbound=0; //数组上界
rgabound[2].cElements=16; //数组所含元素数
rgabound[2].lLbound=0; //数组上界
rgabound[3].cElements=16; //数组所含元素数
rgabound[3].lLbound=0; //数组上界
rgabound[4].cElements=16; //数组所含元素数
rgabound[4].lLbound=0; //数组上界
rgabound[5].cElements=16; //数组所含元素数
rgabound[5].lLbound=0; //数组上界
rgabound[6].cElements=16; //数组所含元素数
rgabound[6].lLbound=0; //数组上界
rgabound[7].cElements=16; //数组所含元素数
rgabound[7].lLbound=0; //数组上界
rgabound[8].cElements=16; //数组所含元素数
rgabound[8].lLbound=0; //数组上界
rgabound[9].cElements=16; //数组所含元素数
rgabound[9].lLbound=0; //数组上界
rgabound[10].cElements=16; //数组所含元素数
rgabound[10].lLbound=0; //数组上界
rgabound[11].cElements=16; //数组所含元素数
rgabound[11].lLbound=0; //数组上界
rgabound[12].cElements=16; //数组所含元素数
rgabound[12].lLbound=0; //数组上界
rgabound[13].cElements=16; //数组所含元素数
rgabound[13].lLbound=0; //数组上界
rgabound[14].cElements=16; //数组所含元素数
rgabound[14].lLbound=0; //数组上界
rgabound[15].cElements=16; //数组所含元素数
rgabound[15].lLbound=0; //数组上界
//创立数组
Picsize.parray=SafeArrayCreate(VT_R8,16,rgabound); //创立一维数组
//锁定数组
SafeArrayLock(Picsize.parray);
//数组传递数据
Picsize.parray->pvData=*figsize;

代码如上,执行到最后一句时出错
access violation 0x000000005 但是二维数组是可以的,这是为什么呢?
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj_yhl 2009-04-29
  • 打赏
  • 举报
回复
崩溃,犯了这么低级的一个错误呵!16*16是个二维数组,郁闷死了,后来还改方案改一维的了,哎!!!
HotSoftg 2009-04-24
  • 打赏
  • 举报
回复
ATL::CComArray
changy 2009-04-23
  • 打赏
  • 举报
回复
以下代码就是创建2维16*16数组的
VARIANT Picsize;
VariantInit(&Picsize);
Picsize.vt=VT_R8|VT_ARRAY;
double figsize[16][16]={{0.0,0.0},{0,0}};
SAFEARRAYBOUND rgabound[2];
rgabound[0].cElements=16; //数组所含元素数
rgabound[0].lLbound=0; //数组上界
rgabound[1].cElements=16; //数组所含元素数
rgabound[1].lLbound=0; //数组上界 //创立数组
Picsize.parray=SafeArrayCreate(VT_R8,2,rgabound);
.........
做鸡真好吃 2009-04-23
  • 打赏
  • 举报
回复
mark~
  • 打赏
  • 举报
回复
楼主,16维数组....
liuzxchina 2009-04-22
  • 打赏
  • 举报
回复
16*16,就是一个2维数组
我看你上面好像是创建了一个16维数组,结果就是16的16次方,2的64次方,2的32次方是4G内存,这要占用多少内存呐?所以创建数据应该是失败了,
wj_yhl 2009-04-22
  • 打赏
  • 举报
回复
有解决方法吗?我的注释的确是错了,忘了修改了,我主要是为了创建一个16X16的数组,可是就是不成功。
changy 2009-04-22
  • 打赏
  • 举报
回复
确实>6时,SafeArrayCreate返回了NULL
不过你弄错参数含义了,
HRESULT SafeArrayCreate(
VARTYPE vt,
unsigned int cDims,
SAFEARRRAYBOUND FAR *rgsabound );
这里cDims是维数,你创建2维数组应该SafeArrayCreate(VT_R8,2,rgabound);
你后面跟的注释也是错的,差点把我都搞糊涂了,sigh
wj_yhl 2009-04-22
  • 打赏
  • 举报
回复
Picsize.parray->pvData=*figsize
代码发错了,上面应改为、
Picsize.parray->pvData=figsize

经过我的实验,维数到6时正常,从7开始就会出现错误,难道对数组的大小有限制吗?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧