引用两个具有相同简单名称的 dll



我正在使用利用Solidworks API和CAMWorks API的 VB.NET 开发Solidworks Addin。

基本上,Solidworks集成了一个名为"SolidworksCAM"的CAMWorks的免费版本。CAMWorks 和 SolidworksCAM 的 API dll 引用是不同的,每个都有唯一的 GUID,但保持相同的简单名称"Interop.CAMWorksLib.dll"。API 函数 100% 相同,只是每个软件都为其 API 附带了不同的 GUID。此 GUID 与 Solidworks 中加载的 COM 程序集相关联,因此,如果 Solidworks 加载了 SolidworksCAM,并且我的插件符合 CAMWorks API 参考,则将无法检索 COM 对象。

如何在没有两个项目的情况下实现这两个 API 之间的兼容性?甚至可能吗?谢谢!

每当我将问题发布到讨论板上时,似乎我总是在不久之后解决它。

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

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

在听取了不使用 LoadFile(( 的建议后,我发现 Solidworks API 中有一个方法可以让你做到这一点。通过使用 Sldworks::GetAddInObject,您可以获取您选择的任何插件的插件对象。然后你可以使用CAMWORKSADDINLib来与之交互。感谢您的建议,这是我问题的完美解决方案。

最新更新