明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1976|回复: 2

[求助]环形阵列函数问题

[复制链接]
发表于 2009-3-18 19:17:00 | 显示全部楼层 |阅读模式

下面是我的代码:
           LPDISPATCH pAppDisp;
          pAppDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);
          VARIANT pArrayObjs;
         VariantInit(&pArrayObjs);
         V_VT(&pArrayObjs) = VT_ARRAY | VT_DISPATCH;
         double val[3] = {0,0,0};
         VARIANT basePoint ;
         CTransUtil::PointsToVariant (val,&basePoint);//将double型数组转换为VARIANT型
          AcGePoint3d ptCenter(100, 100, 0);
         AcDbObjectId objId=CTransUtil::CreateCircle(ptCenter, 20);//创建一个以100,100为圆心以20为半径的圆
       if (SUCCEEDED(AcAxArrayPolar(objId,pAppDisp,4,2*(CTransUtil::PI()),basePoint,&pArrayObjs)))acutPrintf("\nsucceeded");

//将DOUBLE转换为VARIANT型
void  CTransUtil::PointsToVariant (double* pt,VARIANT *a)

{SAFEARRAYBOUND rgsaBound;
 rgsaBound.lLbound=0L;
 rgsaBound.cElements=3;

SAFEARRAY* psa=NULL;
 psa=SafeArrayCreate(VT_R8,1,&rgsaBound);
 for(long i=0;i<3;i++)
 {if( FAILED(SafeArrayPutElement(psa,&i,&pt)))
 acutPrintf("\nPutElement FAILED");
 }
 V_VT(a)=VT_ARRAY | VT_R8;
 V_ARRAY(a)=psa;}

调试时代码没有问题,可是在执行时却显示CAD内部命令出错,请问我哪里出了问题???

高手一定帮帮忙啊

发表于 2009-3-21 10:49:00 | 显示全部楼层
可能是内存释放问题。SafeArrayCreate创建出来内存直接传入了CAD,可能会有问题。查一下MSDN,用拷贝函数复制一份数据传入CAD,然后把SafeArrayCreate创建的释放掉。
发表于 2009-3-23 15:34:00 | 显示全部楼层
basePoint 有问题,因为它的parray所指的数组psa生命期已经结束了,parray所指的内容是不确定的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:45 , Processed in 0.171502 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表