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).
其他信息如下。
- 编译器:Microsoft Visual C# 2010 Express
- 操作系统:Microsoft Windows 7
64 bit
(已更新)
- 登录帐户:管理员
- WFA 目标框架:Microsoft .NET Framework 4.0 客户端
简介
- WFA 架构:
x86
(32 位)
- 库的架构:
x86
(32 位)
当我通过 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 注册表。
但是,问题仍然存在。
在我的 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"));
当我调试我的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).
其他信息如下。
- 编译器:Microsoft Visual C# 2010 Express
- 操作系统:Microsoft Windows 7
64 bit
(已更新) - 登录帐户:管理员
- WFA 目标框架:Microsoft .NET Framework 4.0 客户端 简介
- WFA 架构:
x86
(32 位) - 库的架构:
x86
(32 位)
当我通过 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 注册表。
但是,问题仍然存在。
在我的
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"));