夏侯冉 2021-06-12 13:19 采纳率: 0%
浏览 242

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


 

  • 写回答

4条回答 默认 最新

  • 云湖之旅 2021-06-16 13:20
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振