0564.测试.zip在ORD旗舰版中出现了插入多个单元软件直接崩退的问题,也不会报错,在原来的ORD 10.08版本中就没有出现过这种情况,这是我的测试代码和文件,请各位老师帮忙看看是什么问题导致的, 谢谢
不知道您用中国版本地工具中的放置单元工具测试过没有,单元放置这块本身底层就是MS的接口,看了您的代码,崩溃具体出现再哪一块》?是 BIM.CellElement ele = myApp.CreateCellElement2(cellName, point, scal, true, ma);这句吗?
老师,崩溃的地方我们没找到,单步执行就不会崩溃,直接执行就软件崩退,报错程序信息为 “[10004] OpenRoadsUltimateChina.exe”已退出,返回值为 -1073740940 (0xc0000374)。
老师, 用我那个代码,能加载出来单元库, 没问题
换用PInvoke技术调用c/c++的函数来完成从单元库中放置单元的工作吧,COM接口可能在这种频繁调用的情况下有些问题。
[DllImport("ustation.dll")] public unsafe static extern uint mdlCell_placeCell(DPoint3d* rOrigin, DPoint3d* scale, bool trueScale, DMatrix3d* rotMatrix, short* attributes, uint ggroup, bool relativeMode, uint baseLevel, int sharedFlag, long cellName, long library); [DllImport("ustation.dll")] public unsafe static extern uint mdlElmdscr_read(long* elemDescrPP, uint filePos, long modelRef, int expandSharedCells, uint* readFilePos); public unsafe static void TempFunction() { MsApp.AttachCellLibrary(@"D:\CellLib1.dgn"); DPoint3d rOrigin = DPoint3d.Zero; DPoint3d scale = new DPoint3d(1, 1, 1); DMatrix3d rotMatrix = DMatrix3d.Identity; string cellName = "MyCell1"; IntPtr intPtr = Marshal.StringToHGlobalUni(cellName); uint filePos = mdlCell_placeCell(&rOrigin, &scale, false, &rotMatrix, null, 0, false, 0, 0, intPtr.ToInt64(), 0); long elmdscr; mdlElmdscr_read(&elmdscr, filePos, Session.Instance.GetActiveDgnModel().GetNative().ToInt64(), 0, null); BIM.Element cellEle = MsApp.MdlCreateElementFromElementDescrP(elmdscr); MessageBox.Show(cellEle.ID.ToString()); Marshal.FreeHGlobal(intPtr); }
老师,为啥我这会报错,是我缺少引用吗
请勾选下图这个选项:
所以,目前的问题估计出在你的cel文件,类似单元库如果出现某种情况,比如数量很大的情况,调用创建单元这个接口就会异常。
张老师, 我没明白您的意思,我的cel文件,我这能加载,您发的cel文件,我这也能加载,为啥是我的cel有问题呢,不太明白