酒店网站建设策划方案,微信平台,建设银行网网站打不开,什么是网络营销的现实基础前言#xff1a;在实际项目开发中#xff0c;我们总会遇到一些问题。比如说在CAD打开之前#xff0c;修改注册表的内容#xff0c;或者解决CAD在没有完全加载想要的dll情况下#xff0c;功能运行报错的bug。因此#xff0c;下面和大家介绍一下IExtensionApplication接口 … 前言在实际项目开发中我们总会遇到一些问题。比如说在CAD打开之前修改注册表的内容或者解决CAD在没有完全加载想要的dll情况下功能运行报错的bug。因此下面和大家介绍一下IExtensionApplication接口 IExtensionApplication接口
namespace Autodesk.AutoCAD.Runtime
{public interface IExtensionApplication{void Initialize();void Terminate();}
}Initialize() 在插件载入时先运行当前方法 Terminate() 在CAD关闭的时候运行当前方法 因此我们可以继承这个结构实现我们自己想定义的方法
使用案例一自动运行Ribbon的命令
创建Ribbon方法
具体可以查看上一篇博客这里就不继续赘述了
public class RibbonCmd{[CommandMethod(RibbonCmd)]public void Ribbon(){...定义按钮代码}}定义IExtensionApplication接口类
public class App : IExtensionApplication{public void Initialize(){Document acdDoc Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;acdDoc.SendStringToExecute(RibbonCmd\n, true, false, false);}public void Terminate(){}}这里需要注意的点是方法后面一定加 “\n” 模拟点击enter键这样子才能运行命令
使用案例二自动加载dll
背景
经常在使用一些自己定义的dll文件或者公用比较多的类库时。总会出现自己想要的dll没有给CAD自动加载进来这样子我们需要手动去添加对应的dll到CAD的运行环境下以避免出来未找到相关程序的bug
定义IExtensionApplication接口类 public class App : IExtensionApplication{public void Initialize(){AppDomain.CurrentDomain.AssemblyResolve CurrentDomain_AssemblyResolve;}private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args){AssemblyName assemblyName new AssemblyName(args.Name);string filePath Path.Combine(Path.GetDirectoryName(typeof(App).Assembly.Location), string.Format({0}.dll, assemblyName.Name));return File.Exists(filePath) ? Assembly.LoadFrom(filePath) : null;}public void Terminate(){}}AssemblyResolve事件 当对某个程序集解析失败的时候运行当前事件。 因此相关dll加载出错时会进来当前命令中指定相关路径再加载一次dll文件 最后
上面只是简单的介绍两种常使用的方法还有很多广阔的领域可供大家去探索。也可以在这边注入一些服务修改CAD系统的一些操作。大致的分享就到这里了大家多多点赞多多支持~~~