C# 开发 SolidWorks插件环境及项目配置

C# 开发 SolidWorks插件环境及项目配置

软件平台配置

VS2022+ SolidWorks2023。

新建项目:打开 VS2022 → 点击 “创建新项目”;搜索 类库 → 选择 “类库 (.NET Framework)”;点击 “下一步”。

新建类库 (.NET Framework)项目

框架 .NET Framework 4.8(或 4.0)

NET Framework 选择

删除默认类文件,在解决方案资源管理器中,右键 Class1.cs → 删除,后面自行创建。

创建 References 文件夹并复制 DLL

右键项目 → 添加 → 新建文件夹,命名为 References
在文件资源管理器中,从 SolidWorks 的 API\redist 目录复制以下 3 个 DLL:
SolidWorks.Interop.sldworks.dll
SolidWorks.Interop.swpublished.dll
SolidWorks.Interop.swconst.dll
solidworkstools.dll
粘贴到项目的 References 文件夹中
右键 “引用” 节点 → “添加引用…”
点击 “浏览” → 选中 References 文件夹中的 3 个 DLL
点击 “确定”
在 “引用” 节点下,依次选中这 4 个 DLL,在属性窗口中设置:
属性 设置值
嵌入互操作类型 False
复制本地 True(调试时设为 True,发布后改为 False)

选择SolidWorks引用文件

有时候需要添加 System.Windows.Forms 引用,因为使用到了Windows相关资源。

编写插件代码

创建主插件类:右键项目 → 添加 → 类,命名为 MainAddin.cs

配置项目属性

右键项目 → “属性”
“生成” 选项卡:
平台目标:Any CPU
勾选 ✅ “为 COM 互操作注册”
“调试” 选项卡:
启动外部程序:C:\Program Files\SolidWorks Corp\SolidWorks\SLDWORKS.exe

完成代码如下:

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using SolidWorks.Interop.swpublished;
using System;
using System.Collections.Generic;
using System.Net;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace MyFirstSwAddin
{
    [ComVisible(true)]
    [Guid("YOUR GUID")] // 生成唯一 GUID 替换此处
    public class MainAddin : ISwAddin
    {
        private ISldWorks _swApp;
        private int _cookie;

        //与SW开始连接事件=====================================================
        public bool ConnectToSW(object ThisSW, int Cookie)
        {
            _swApp = (ISldWorks)ThisSW;
            _cookie = Cookie;
            _swApp.SendMsgToUser("插件加载成功!");
            return true;
        }

        //与SW断开连接事件=====================================================
        public bool DisconnectFromSW()
        {
            if (_swApp != null)
            {
                _swApp.SendMsgToUser("插件已卸载。");
                _swApp = null;
            }
            return true;
        }

        //DLL 注册函数===========================================================
        [ComRegisterFunction]
        public static void RegisterFunction(Type t)
        {
            try
            {
                string guid = "{" + t.GUID.ToString() + "}";

                using (var key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(
                    @"SOFTWARE\SolidWorks\AddIns\" + guid))
                {
                    key.SetValue(null, 1);
                    key.SetValue("Title", "蜗牛插件");
                    key.SetValue("Description", "蜗牛插件设计好帮手!");
                }

                using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(
                    @"Software\SolidWorks\AddInsStartup\" + guid))
                {
                    key.SetValue(null, 1, Microsoft.Win32.RegistryValueKind.DWord); //第2参数改为1启动SW自动启动插件
                }
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show("注册失败: " + e.Message);
            }
        }

        //DLL 反注册函数=========================================================
        [ComUnregisterFunction]
        public static void UnregisterFunction(Type t)
        {
            try
            {
                string guid = "{" + t.GUID.ToString() + "}";
                Microsoft.Win32.Registry.LocalMachine.DeleteSubKeyTree(
                    @"SOFTWARE\SolidWorks\AddIns\" + guid);
                Microsoft.Win32.Registry.CurrentUser.DeleteSubKeyTree(
                    @"Software\SolidWorks\AddInsStartup\" + guid);
            }
            catch { }
        }
    }
}

Leave a comment

Your email address will not be published.