使用C++ bulider 作AutoCad 二次开发遇到了关于SafeArray类型问题,望高手指点!(200分)

  • 主题发起人 主题发起人 mxchao
  • 开始时间 开始时间
M

mxchao

Unregistered / Unconfirmed
GUEST, unregistred user!
使用自动化对象对AutoCad进行控制绘图,其中很多绘图函数参数使用SafeArray类型,
艰难的创建了PSafaArray类型,并进行赋值,可绘制时传递到Cad中的数组永远是{0,0,0}
也就是原点坐标,可使用safeArrayGetElement函数可以得到正确的数组里的数据,
百思不得其解,望高手指点!
有没有人使用C++ bulider做过AutoCad的二次开发,能够给个例子!
下边是代码:
ACad=Variant::CreateObject("AutoCAD.Application.14");
ACad.OlePropertySet("Visible",true);
// //得到CAD图形空间
MSpace=ACad.OlePropertyGet("ActiveDocument").OlePropertyGet("ModelSpace");
//error:ActiveDocument is not a member of Olevariant
int var1,var2,var3;
Variant Temp ;
SAFEARRAY * psa;
SAFEARRAY * StartPoint;
SAFEARRAY * EndPoint;
long ix[1];
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 3;
psa = SafeArrayCreate(VT_R8, 1, rgsabound);
StartPoint = SafeArrayCreate(VT_R8, 1, rgsabound);
EndPoint = SafeArrayCreate(VT_R8, 1, rgsabound);
Caption = SafeArrayGetDim(psa);
var1 = StrToInt(Edit1->Text);
ix[0] = 0;
SafeArrayPutElement(psa, ix, &var1);
var2 = StrToInt(Edit2->Text);
ix[0] = 1;
SafeArrayPutElement(psa, ix, &var2);
var3 = 0;
ix[0] = 2;
SafeArrayPutElement(psa, ix, &var3);
Temp = MSpace.OleFunction("AddCircle",psa,StrToInt(Edit3->Text));
//上边函数可以在Cad中绘制图形,单圆心永远是原点,即使改变了数值,我感觉是psa
//根本就没有将数据传输过去,可使用safeArrayGetElement可以得到psa正确的值
SafeArrayDestroy(psa);
 
没人遇到过吗?
 
自己解决了!
 
后退
顶部