C#做solidworks二次开发,加载dll失败

标题: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等这种软件也会有类似的情况,不太想重装系统啊,有哪位大佬能解答下问题的原因和办法吗?谢谢啦!


 

用第三方的东西,你只能满足他的运行环境,没其他办法,既然你有电脑可以用,调用的方法和参数肯定是知道的,可以试试把这个DLL做动态库调用进来试试

您的意思是不通过引用的方法,用其他办法来调用?其他的我也不会啊,有什么方法吗?我去搜搜学下

控制面板去卸载solidworks,然后重装,只试过这样的

大哥解决了没有, 我也遇到了