0

当我调试我的Windows 窗体应用程序时,我收到此错误:

由于以下错误,检索具有 CLSID {27526253-6119-4B38-A1F9-2DC877E72334} 的组件的 COM 类工厂失败:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))

正因为如此,我的WFA无法与我电脑上安装的Solidworks软件交互;WFA需要与Solidworks交互的唯一库是 ( Solidworks目录SolidWorks.Interop.sldworks.dll中的本地位置C:\Program Files\SOLIDWORKS Corp 2017\SOLIDWORKS\SolidWorks.Interop.sldworks.dll)。

其他信息如下。

  • 编译器:Microsoft Visual C# 2010 Express
  • 操作系统:Microsoft Windows 7 64 bit(更新)
  • 登录帐户:管理员
  • WFA 目标框架:Microsoft .NET Framework 4.0 Client Profile
  • 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
    • 按下Enter
    • 阅读此消息:

模块C:\Windows\SysWOW64\SolidWorks.Interop.sldworks.dll已加载,但对 DllRegisterServer 的调用失败...

所以,图书馆没有注册。

    • 粘贴SolidWorks.Interop.sldworks.dll到目录 C:\Windows\Microsoft.NET\Framework\v4.0.30319
    • 管理员身份运行命令提示符,而不是键入C:\Windows\Microsoft.NET\Framework\v4.0.30319>regasm SolidWorks.Interop.sldworks.dll
    • 按下Enter
    • 阅读此消息:

类型已注册。

所以,我想,现在图书馆注册了,其实我看到的是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();
        }
    }
    }
    

问题仍然存在。

你能帮我么?谢谢。

4

1 回答 1

2

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

SldWorks swApp = (SldWorks)Activator.CreateInstance(System.Type.GetTypeFromProgID("SldWorks.Application"));
于 2017-06-23T01:41:52.523 回答