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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM