自己写了一段代码如下: CString blockName=pos->first;//得到块名 CAcadBlock m_block=m_acadDoc.ObjectIdToObject(pos->second);//得到块对象,跟块名放在同一个Pair里 std::vector<long> m_acadList=m_entityList[blockName]; //得到实体的ID集合 int num2=m_acadList.size();//得到实体数量 CComVariant var1; var1.vt=VT_DISPATCH|VT_ARRAY; SAFEARRAYBOUND rgsabound[1]; rgsabound[0].cElements=num2; rgsabound[0].lLbound=0; var1.parray=SafeArrayCreate(VT_VARIANT,1,rgsabound); for(long j=0;j<num2;j++) { LPDISPATCH entity=m_acadDoc.ObjectIdToObject(m_acadList.at(j));//将实体从ID转换为IDispatch指针 SafeArrayPutElement(var1.parray,&j,entity);//加入到数组 } CComVariant var2; var2.vt=VT_DISPATCH; var2.pdispVal=m_block;//将目标快由CAcadBlock对象转化为IDispatch指针 m_acadDoc.CopyObjects(var1,var2,NULL);调用拷贝函数,这句话有问题. 看了很多资料,都是用VB写的,用一个可变Object数组就可以了,可是我其他程序都是用C++完成,检查了很长时间,没有发现问题,只好求教版主了?谢谢 |