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

时间:2019-02-06 12:36:44

标签: vb.net solidworks

我正在使用VB.NET开发SolidWorks插件,该插件利用了Solidworks API和CAMWorks API。

基本上,Solidworks已集成了称为“ SolidworksCAM”的CAMWorks的免费版本。 CAMWorks和SolidworksCAM的API dll参考不同,每个都有唯一的GUID,但保持相同的简单名称“ Interop.CAMWorksLib.dll”。 API功能100%相同,只是每个软件附带其API的不同GUID。该GUID绑定到SolidWorks中加载的COM部件,因此,如果Solidworks加载了SolidworksCAM并且我的插件符合CAMWorks API参考,则它将无法检索COM对象。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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