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的主要内容,如果未能解决你的问题,请参考以下文章

Revit二次开发——读取cad中的文字信息

怎样学习用C++进行cad二次开发?

CAD二次开发,安装程序中写注册表

有没有啥方法直接通过C#控制CAD而不是采用dll方式对CAD二次开发的

c#打开cad更新的同时更新dll

C#语言对AutoCAD二次开发