CAD 二次开发 -- 自动加载开发的DLL
CAD二次开发可以采用写扩展DLL的方式实现。该DLL的函数可以被CAD调用。
但是调用前,必须用命令netload 将该dll加载到CAD。
其实可以修改注册表,当CAD软件启动后,自动加载扩展DLL。
为此,我写了一个函数,很方便的修改注册表,达到自动加载dll的目的!
该函数支持各个版本cad。
string[] GetRegSubDir(RegistryKey autoCad, string startFlag)
{
string[] subKey = autoCad.GetSubKeyNames();
return subKey.Where(o => o.StartsWith(startFlag)).ToArray();
}
1 //strCadRegKey = "HLD_CAD_Import"; //唯一注册标识 可用公司名称和程序名称 2 //strDll dll文件路径 3 private bool WriteRegistryKey(string strDll,string strCadRegKey) 4 { 5 try 6 { 7 RegistryKey localMachine = Registry.LocalMachine; 8 RegistryKey SOFTWARE = localMachine.OpenSubKey("SOFTWARE", true); 9 RegistryKey Autodesk = SOFTWARE.OpenSubKey("Autodesk", true); 10 RegistryKey AutoCAD = Autodesk.OpenSubKey("AutoCAD", true); 11 12 int result = 0; 13 foreach (string subDir in GetRegSubDir(AutoCAD, "R")) 14 { 15 try 16 { 17 RegistryKey CadVersion = AutoCAD.OpenSubKey(subDir, true); 18 19 string AcadVersion = GetRegSubDir(CadVersion, "ACAD-").FirstOrDefault(); 20 RegistryKey ACAD = CadVersion.OpenSubKey(AcadVersion, true); 21 22 RegistryKey Applications = ACAD.OpenSubKey("Applications", true); 23 24 //删除旧有记录 25 try 26 { 27 Applications.DeleteSubKeyTree(strCadRegKey); 28 } 29 catch (Exception ex) 30 { } 31 32 RegistryKey MXCAD = Applications.CreateSubKey(strCadRegKey); 33 MXCAD.SetValue("LOADCTRLS", 0x02); 34 MXCAD.SetValue("LOADER", strDll); 35 MXCAD.SetValue("MANAGED", 0x01); 36 result++; 37 } 38 catch (Exception ex) 39 { 40 if (showMessage) 41 System.Windows.Forms.MessageBox.Show(string.Format("注册时出错!{0}", ex.Message)); 42 } 43 } 44 45 if (result > 0 && showMessage) 46 System.Windows.Forms.MessageBox.Show(string.Format("注册成功!")); 47 return true; 48 } 49 catch (Exception ex) 50 { 51 52 return false; 53 } 54 }
技术交流联系qq 13712486
专注C#、C++。擅长WPF、WinForm、QT等技术。
研究ofd多年,开发了一些列产品。
技术交流QQ群:565438497。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端