首页 > 解决方案 > 引用两个具有相同简单名称的 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 之间的兼容性?甚至可能吗?谢谢!

标签: vb.netsolidworks

解决方案


每当我向董事会发布问题时,似乎我总是很快就会解决它。

为了将来参考,我使用反射来动态加载 Dll。下面是一些更详细的信息。

我将 Dll 放在项目中的两个不同文件夹中,并将它们设置为 Copy。然后我使用Assembly.LoadFile加载 dll 并获取它的程序集。我使用此程序集获取构造函数类“CWAppClass”并将其类型输入Activator.CreateInstance以获取主 CWApp 类的实例。这样你就可以使用没有错误的任何一个。谢谢您的帮助!

在接受不使用 LoadFile() 的建议后,我发现 Solidworks API 中有一种方法允许您执行此操作。通过使用Sldworks::GetAddInObject,您可以获得您选择的任何插件的插件对象。然后您可以使用 CAMWORKSADDINLib 与之交互。感谢您的建议,这是解决我问题的完美解决方案。


推荐阅读