CAD 二次开发 -- 自动加载开发的DLL
Posted belx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); } //strCadRegKey = "HLD_CAD_Import"; //唯一注册标识 可用公司名称和程序名称 //strDll dll文件路径 private bool WriteRegistryKey(string strDll,string strCadRegKey) { try { RegistryKey localMachine = Registry.LocalMachine; RegistryKey SOFTWARE = localMachine.OpenSubKey("SOFTWARE", true); RegistryKey Autodesk = SOFTWARE.OpenSubKey("Autodesk", true); RegistryKey AutoCAD = Autodesk.OpenSubKey("AutoCAD", true); int result = 0; foreach (string subDir in GetRegSubDir(AutoCAD, "R")) { try { RegistryKey CadVersion = AutoCAD.OpenSubKey(subDir, true); string AcadVersion = GetRegSubDir(CadVersion, "ACAD-").FirstOrDefault(); RegistryKey ACAD = CadVersion.OpenSubKey(AcadVersion, true); RegistryKey Applications = ACAD.OpenSubKey("Applications", true); //删除旧有记录 try { Applications.DeleteSubKeyTree(strCadRegKey); } catch (Exception ex) { } RegistryKey MXCAD = Applications.CreateSubKey(strCadRegKey); MXCAD.SetValue("LOADCTRLS", 0x02); MXCAD.SetValue("LOADER", strDll); MXCAD.SetValue("MANAGED", 0x01); result++; } catch (Exception ex) { if (showMessage) System.Windows.Forms.MessageBox.Show(string.Format("注册时出错!{0}", ex.Message)); } } if (result > 0 && showMessage) System.Windows.Forms.MessageBox.Show(string.Format("注册成功!")); return true; } catch (Exception ex) { return false; } }
以上是关于CAD 二次开发 -- 自动加载开发的DLL的主要内容,如果未能解决你的问题,请参考以下文章