标题:C#做solidworks二次开发时,无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型,加载dll失败
背景介绍:在学习C#进行SOLIDWORKS API二次开发时,发现一个问题,请教各位大佬:
功能说明:这段代码功能很简单:就是调用solidworks安装包里的dll(如下图),来打开solidworks并显示界面;
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
namespace OpenSW
{
public partial class Form1 : Form
{
SldWorks swApp = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Open_Click(object sender, EventArgs e)
{
swApp = new SldWorks();
swApp.Visible = true;
}
}
}
问题介绍:电脑是win10系统,之前装的是solidworks2014版本,用的对应安装包的2个dll,打开正常,由于工作原因,安装了solidworks2016版本,把solidworks2014卸载了,然后cs里面换成对应2016版本的dll,就出现问题了:在倒数第五行,swApp = new SldWorks();编译的时候,
“System.InvalidCastException”类型的未经处理的异常在 OpenSW.exe 中发生
其他信息: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“SolidWorks.Interop.sldworks.SldWorks”。此操作失败的原因是对 IID 为“{83A33D22-27C5-11CE-BFD4-00400513BB57}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。
疑问是:
1、打开任务管理器,我发现solidworks2016的进程已经打开了,但不明白这个地方为什么会调用失败?
2、我用另外一个win7电脑做了同样的实验,装2个版本的sw,分别用对应的dll,程序可以运行;用另一台win10做同样的实验,会在屏幕左上角显示,保存旧版本文件,这说明调用的是低版本的sw,但界面显示不成功,打不开高版本的solidworks,为什么win7可以,win10就不行呢?
3、我知道如果彻底删除所有solidworks,然后重新只安装某一版本的solidworks,应该是可以解决问题的,但solidworks软件还不是太好删除干净(C盘和注册表藏了好多东西,一般都是重装系统来重装sw)有没有什么办法能方便些解决这个问题吗?
我上网查了,尝试过的办法有:
1、改工程属性,目标平台由Any CPU改为x86,还是不行
2、在cs界面修改引用文件的嵌入操作类型:改为false;如下图,也不行;
我估计用C#关联excel等这种软件也会有类似的情况,不太想重装系统啊,有哪位大佬能解答下问题的原因和办法吗?谢谢啦!