[求助]环形阵列函数问题
<p>下面是我的代码:<br/> LPDISPATCH pAppDisp;<br/> pAppDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);<br/> VARIANT pArrayObjs;<br/> VariantInit(&pArrayObjs);<br/> V_VT(&pArrayObjs) = VT_ARRAY | VT_DISPATCH;<br/> double val = {0,0,0};<br/> VARIANT basePoint ;<br/> CTransUtil::PointsToVariant (val,&basePoint);//将double型数组转换为VARIANT型<br/> AcGePoint3d ptCenter(100, 100, 0);<br/> AcDbObjectId objId=CTransUtil::CreateCircle(ptCenter, 20);//创建一个以100,100为圆心以20为半径的圆<br/> if (SUCCEEDED(AcAxArrayPolar(objId,pAppDisp,4,2*(CTransUtil::PI()),basePoint,&pArrayObjs)))acutPrintf("\nsucceeded");</p><p>//将DOUBLE转换为VARIANT型<br/>void CTransUtil::PointsToVariant (double* pt,VARIANT *a)</p><p>{SAFEARRAYBOUND rgsaBound;<br/> rgsaBound.lLbound=0L;<br/> rgsaBound.cElements=3;</p><p>SAFEARRAY* psa=NULL;<br/> psa=SafeArrayCreate(VT_R8,1,&rgsaBound);<br/> for(long i=0;i<3;i++) <br/> {if( FAILED(SafeArrayPutElement(psa,&i,&pt)))<br/> acutPrintf("\nPutElement FAILED");<br/> }<br/> V_VT(a)=VT_ARRAY | VT_R8;<br/> V_ARRAY(a)=psa;}</p><p>调试时代码没有问题,可是在执行时却显示CAD内部命令出错,请问我哪里出了问题???</p><p>高手一定帮帮忙啊</p> 可能是内存释放问题。SafeArrayCreate创建出来内存直接传入了CAD,可能会有问题。查一下MSDN,用拷贝函数复制一份数据传入CAD,然后把SafeArrayCreate创建的释放掉。 basePoint 有问题,因为它的parray所指的数组psa生命期已经结束了,parray所指的内容是不确定的。
页:
[1]