vb.net - 引用两个具有相同简单名称的 dll
问题描述
我正在使用 VB.NET 开发 Solidworks 插件,该插件利用了 Solidworks API 和 CAMWorks API。
基本上,Solidworks 集成了一个免费版本的 CAMWorks,称为“SolidworksCAM”。CAMWorks 和 SolidworksCAM 的 API dll 参考不同,每个都有唯一的 GUID,但保持相同的简单名称“Interop.CAMWorksLib.dll”。API 功能 100% 相同,只是每个软件都为其 API 提供了不同的 GUID。此 GUID 与加载到 Solidworks 中的 COM 程序集相关联,因此如果 Solidworks 加载了 SolidworksCAM 并且我的插件符合 CAMWorks API 参考,它将无法检索 COM 对象。
如何在没有两个项目的情况下实现这两个 API 之间的兼容性?甚至可能吗?谢谢!
解决方案
每当我向董事会发布问题时,似乎我总是很快就会解决它。
为了将来参考,我使用反射来动态加载 Dll。下面是一些更详细的信息。
我将 Dll 放在项目中的两个不同文件夹中,并将它们设置为 Copy。然后我使用Assembly.LoadFile加载 dll 并获取它的程序集。我使用此程序集获取构造函数类“CWAppClass”并将其类型输入Activator.CreateInstance以获取主 CWApp 类的实例。这样你就可以使用没有错误的任何一个。谢谢您的帮助!
在接受不使用 LoadFile() 的建议后,我发现 Solidworks API 中有一种方法允许您执行此操作。通过使用Sldworks::GetAddInObject,您可以获得您选择的任何插件的插件对象。然后您可以使用 CAMWORKSADDINLib 与之交互。感谢您的建议,这是解决我问题的完美解决方案。
推荐阅读
- python - 如何在 python 字典中复制表?(或任何其他数据结构)
- ms-access - 我们如何重新进行查询以从 Price.Present 中删除 [Goods].Remnant 中不存在的估值器?
- google-sheets - =QUERY 获取列名并在 Google 表格中给出列范围?
- google-sheets - 在谷歌表格中创建多级 WBS 级别列表?任务 1.1,子任务 1.1.1 与 arrayFormula
- mysql - UnhandledPromiseRejectionWarning 与 nodejs 和 mysql 请让我知道是什么问题
- c++ - 如何更改代码以避免运行时错误(AddressSanitizer)?
- c# - 在没有 UAC 的情况下使用管理员权限从 C# 运行 PsExec
- sql - SQL-获取列中的字符长度问题,但无法使用变量重现
- arrays - 获取数据库中的单列数组并在 laravel Blade 中显示
- qemu - 如何将每个受支持的 CPU 标志作为 QEMU CPU 标志?