明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1637|回复: 4

[运行时] c#关于cad二次开发时候的dll文件不能卸载,需要每次关闭打开cad 的问题

[复制链接]
发表于 2018-5-3 23:07 | 显示全部楼层 |阅读模式
本帖最后由 冰凌寒露 于 2018-5-3 23:10 编辑

最近在学习c#关于cad 的二次开发,但是调试时候需要每次启动cad,由于使用的cad2014版本,启动很慢,如果每次调试时候都启动cad很消耗时间,于是乎打算网上找找有没有有类似的问题,真还发现有人做了,这是他的原始方案:”新手不能发表链接,直接搜索引擎搜索 AutoCAD.net二次开发netload不能卸载问题解决方法  不出意外就是第一条“,本来打算直接用算了,但是发现在vs2015+cad2014中出现很多问题,所以决定重新写一下,代码如下:
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using System.Windows.Forms;
  4. using Autodesk.AutoCAD.EditorInput;
  5. namespace netload
  6. {
  7.     public class netload
  8.    
  9.     {
  10.        [CommandMethod("dtts")]//启动命令
  11.         public void dtts()//建立公共入口函数
  12.         {
  13.             String[] file_dir;
  14.             //Autodesk.AutoCAD.Windows.OpenFileDialog cad = new Autodesk.AutoCAD.Windows.OpenFileDialog;
  15.             System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog();//"选择动态链接文件",null,"dll","打开dll文件", Autodesk.AutoCAD.Windows.OpenFileDialog.OpenFileDialogFlags.DefaultIsFolder);
  16.             ofd.Multiselect = true;
  17.             //ofd.ShowDialog();
  18.             ofd.Filter = "Files (*.dll)|*.dll";//如果需要筛选txt文件("Files (*.txt)|*.txt")
  19.             if (ofd.ShowDialog()==DialogResult.OK)
  20.               {
  21.                 file_dir = ofd.FileNames;
  22.                 Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  23.                 string b = Convert.ToString(file_dir.Length);
  24.                 b = "共选择" + b + "个动态链接库文件,路径如下:";
  25.                 ed.WriteMessage("\n"+b);
  26.                  for (int i = 0; i < file_dir.Length; i++)
  27.                    {
  28.                     ed.WriteMessage("\n"+file_dir);
  29.                     }
  30.                }
  31.               else return;
  32.               for(int j=0;j<file_dir.Length;j++)
  33.                 {
  34.                     Byte[] buffer = System.IO.File.ReadAllBytes(file_dir[j]);//将文件拷贝到内存
  35.                     System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(buffer);//从内存中加载文件
  36.                 }

  37.          }
  38.         }
  39. }  

//这样编译的文件可以加载多个dll文件。
步骤如下
1、开发环境VS2015+cad2014。
2、新建动态链接库文件。
3、在需要开发的cad版本中引用accoremgd.dll文件和acmgd.dll文件
4、复制以上代码。
5、编译dll文件
6、打开CAD程序,netload命令加载刚才编译的文件。
7、打开需要调试的文件的vs代码,找到解决方案中程序的版本信息 AssemblyInfo双击,如下图

8、按F6生成解决方案。
9、在cad中命令行键入"dtts"命令(当然命令的名称可以在代码中修改),不带引号,加载需要调试的文件,可以多选,如下图:

10、至此,dll文件不通过netload命令成功加入文件到cad中。
11、回到vs调试文件后,让然可以按F6重新生成解决方案,生成成功,说明可以文件未被占用。
12、重复9-11步骤后,可以在不关闭cad的情况下多次调试文件。
之所以不上成品文件,是因为cad的版本众多,可能cad2014的版本引用不能满足其他版本的要求,不容易达到效果。
写在最后:感谢新浪博客的中华田园人,和论坛大神“brbright”的支持,由于本人是个菜鸟,刚接触c#,存在诸多错误请大家多多包含。



















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +1 金钱 +6 收起 理由
matador99bb + 6 很给力!
BaoWSE + 1 赞一个!论坛有你更精彩

查看全部评分

发表于 2021-4-28 20:04 | 显示全部楼层
关于卸载dll的好文章啊!!!1
发表于 2021-5-14 14:37 | 显示全部楼层
我在AutoCAD 2019测试是不成功的;初次装载dll没有报异常,但dll里面的命令没有识别出来,再次装载则报异常;我在中望CAD 2020测试是部分成功,初次装载可以识别命令,但再次装载也报异常。
楼上的,此方法是覆盖已有,并不是卸载dll.
发表于 2021-5-14 18:55 来自手机 | 显示全部楼层
sieben 发表于 2021-5-14 14:37
我在AutoCAD 2019测试是不成功的;初次装载dll没有报异常,但dll里面的命令没有识别出来,再次装载则报异常 ...

看我这个https://www.cnblogs.com/JJBox/p/13833350.html
发表于 2021-5-17 14:24 | 显示全部楼层
你有种再说一遍 发表于 2021-5-14 18:55
看我这个https://www.cnblogs.com/JJBox/p/13833350.html

好的,谢谢你!那个帖子有点长,后面有时间再认真仔细学习一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 21:55 , Processed in 0.199077 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表