C#: DLL 已注册但 COM 错误 80040154 仍然出现

C#: DLL is registered but COM error 80040154 still appear

当我调试我的Windows表单应用程序时,我得到这个错误:

Retrieving the COM class factory for component with CLSID {27526253-6119-4B38-A1F9-2DC877E72334} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

因此,我的 WFA 无法与我计算机上安装的软件 Solidworks 交互; WFA 需要与 Solidworks 交互的唯一库是 SolidWorks.Interop.sldworks.dll(原位置在Solidworks目录C:\ProgramFiles\SOLIDWORKSCorp2017\SOLIDWORKS\SolidWorks.Interop.sldworks.dll).

其他信息如下。

当我通过 Visual Studio 将库 SolidWorks.Interop.sldworks.dll 添加到我的项目引用时,没有 CLSID

{27526253-6119-4B38-A1F9-2DC877E72334}

进入 Windows 注册表,所以我尝试以这些方式注册该库:

    • 已将 SolidWorks.Interop.sldworks.dll 粘贴到目录中 C:\Windows\SysWOW64
    • 运行 命令提示符 作为 管理员,而不是键入 C:\Windows\SysWOW64> regsvr32 C:\Windows\SysWOW64\SolidWorks.Interop.sldworks.dll
    • 按下输入
    • 阅读此消息:

The module C:\Windows\SysWOW64\SolidWorks.Interop.sldworks.dll was loaded but the call to DllRegisterServer failed...

所以,图书馆没有注册。

    • 已将 SolidWorks.Interop.sldworks.dll 粘贴到目录中 C:\Windows\Microsoft.NET\Framework\v4.0.30319
    • 运行 命令提示符 作为 管理员,而不是键入 C:\Windows\Microsoft。 NET\Framework\v4.0.30319>重温 SolidWorks.Interop.sldworks.dll
    • 按下输入
    • 阅读此消息:

The types were registered.

所以,我认为,现在库已注册,实际上我看到了 CLSID

{27526253-6119-4B38-A1F9-2DC877E72334}

进入 Windows 注册表

但是,问题仍然存在。

  1. 在我的 C# 代码中,我创建了一个 new Guid;这是代码:

    using System;
    using System.Diagnostics;
    using System.Windows.Forms;
    using SolidWorks.Interop.sldworks;
    
    namespace CreateModelSW
    {
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        //Create interface
        SldWorks swApp;
    
        private void buttonCreateModel_Click(object sender, EventArgs e)
        {
            //Kill Solidworks processes
            Process[] processes = Process.GetProcessesByName("SLDWORKS");
            foreach (Process process in processes)
            {
                process.CloseMainWindow();
                process.Kill();
            }
    
            //Create new GUID
            Guid myGuid1 = new Guid("27526253-6119-4B38-A1F9-2DC877E72334");
            object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));
    
            //Create new SOLIDWORKS Part
            swApp = (SldWorks)processSW;
            swApp.Visible = true;
            swApp.NewPart();
        }
    }
    }
    

问题依然存在。

你能帮帮我吗? 谢谢。

您应该使用与版本无关的 progId,试试这个:

SldWorks swApp = (SldWorks)Activator.CreateInstance(System.Type.GetTypeFromProgID("SldWorks.Application"));