关于Winform生成dll在cad中的调试问题

关于Winform生成dll在cad中的调试问题


开发平台:vs2017,win10,CAD2014
对于有Form的dll在启动cad后无法设置断点,网上大部分的中文资料都无法成功设置断点,浪费了几乎一天的时间,最后在翻到一篇博客,和国外cad开发论坛,这个问题才完美解决。
首先中文文献是:

这里是引用
https://www.cnblogs.com/yif1991/p/5796589.html

  • 问题原因:
    原因在于AutoCAD的纤程(Fiber)。是的,是纤程(Fiber)而不是线程(Thread)。VS2010的调试器和AutoCAD的纤程一起工作时会有问题。解决的办法就是关闭AutoCAD纤程。
  • 解决办法:
    在CAD中输入命令nextfiberworld,查看系统变量,1是开启,0是关闭,如需调试,则关闭纤程。该命令只用执行一次,下次开启时会保留。

一篇英文论坛同样提到该问题,同时解决了:该方法会引起的另一个问题,就是调试时,如果你打开一份已经画好的cad图纸,会变得非常得卡,这个问题很有意义,因为调试cad时你需要用到你自己画好的图纸。

这里是引用
https://forums.autodesk.com/t5/net/infamous-fiberworld-0-issue-prevents-autocad-from-opening/td-p/3636998

解决办法很简单,启动cad后,首先把默认图纸关闭,再打开准备好的图纸。
在纤程状态下只能开启一张图纸
所以如果不调试的时候,最好把nextfiberworld参数设置为1。

后面还是会出现无法调试的问题。
解决办法有一个是把文件夹放到桌面或者C盘,不知道是不是文件名过长。

还看到一些文章说,调试不是最好的思路,最重要的是逻辑思路,看每一块是不是运行正确。。。。。。。。好吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您只想通过CAD dll文件,在winform实现CAD功能,可以使用AutoCAD的.NET API来实现。AutoCAD的.NET API是一个专门为.NET开发人员设计的API,可以让您在C# WinForm使用AutoCAD的功能,而不需要打开AutoCAD软件。 下面是一些基本的步骤: 1. 安装AutoCAD 首先,您需要安装AutoCAD软件,以便安装AutoCAD的.NET API。安装后,您可以在以下目录找到AutoCAD的.NET API: ``` C:\Program Files\Autodesk\AutoCAD 20xx\accoremgd.dll ``` 2. 添加对AutoCAD的引用 在Visual Studio,打开项目并在项目引用AutoCAD的.NET API。在“解决方案资源管理器”,右键单击“引用”并选择“添加引用”选项。在“浏览”选项卡,选择上面提到的accoremgd.dll文件并单击“确定”。 3. 创建AutoCAD应用程序对象 使用以下代码创建AutoCAD应用程序对象: ``` using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Transaction trans = db.TransactionManager.StartTransaction(); ``` 4. 创建新的DWG文件 使用以下代码创建新的DWG文件: ``` using (DocumentLock docLock = doc.LockDocument()) { BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; Circle circle = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 5); btr.AppendEntity(circle); trans.AddNewlyCreatedDBObject(circle, true); trans.Commit(); } ``` 其,第一个参数是圆心坐标,第二个参数是圆的半径。 5. 保存DWG文件 使用以下代码保存DWG文件: ``` doc.SaveAs(@"D:\Drawing1.dwg", DwgVersion.Current); ``` 完整的C#代码如下: ``` using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Transaction trans = db.TransactionManager.StartTransaction(); using (DocumentLock docLock = doc.LockDocument()) { BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; Circle circle = new Circle(new Point3d(0, 0, 0), Vector3d.ZAxis, 5); btr.AppendEntity(circle); trans.AddNewlyCreatedDBObject(circle, true); trans.Commit(); } doc.SaveAs(@"D:\Drawing1.dwg", DwgVersion.Current); ``` 这样就可以在C# WinForm使用AutoCAD的.NET API创建DWG文件并绘制圆形了,而不需要打开AutoCAD软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值