Ссылка на две DLL с одинаковым простым именем - PullRequest
0 голосов
/ 06 февраля 2019

Я работаю над надстройкой Solidworks с использованием VB.NET, в котором используются API-интерфейсы Solidworks и CAMWorks.

По сути, Solidworks интегрировал бесплатную версию CAMWorks под названием «SolidworksCAM».Ссылка на API dll для CAMWorks и SolidworksCAM различна, каждая с уникальным GUID, но с одинаковым простым именем «Interop.CAMWorksLib.dll».Функции API на 100% одинаковы, просто каждое программное обеспечение поставляется с различным GUID для своего API.Этот GUID связан с COM-сборкой, загруженной в Solidworks, поэтому, если Solidworks имеет загруженную SolidworksCAM и мой надстройка соответствует справочнику CAMWorks API, он не сможет получить COM-объект.

Как мне добиться совместимости между этимидва API без двух проектов?Это вообще возможно?Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Всякий раз, когда я публикую вопрос на доске, мне кажется, что я всегда решаю его вскоре после этого.

Для дальнейшего использования я использовал Reflection для динамической загрузки библиотек.Ниже приведена более подробная информация.

Я поместил библиотеки Dll в две разные папки в своем проекте и установил их для копирования.Затем я использовал Assembly.LoadFile , чтобы загрузить DLL и получить его сборку.Я использовал эту сборку, чтобы получить класс конструктора "CWAppClass", и передал его тип в Activator.CreateInstance , чтобы получить экземпляр основного класса CWApp.Таким образом, вы можете использовать тот, который не ошибается.Спасибо за помощь!

Получив совет не использовать LoadFile (), я обнаружил, что в API Solidworks есть метод, позволяющий вам это сделать.Используя Sldworks :: GetAddInObject , вы можете получить объект надстройки для любого надстройки, который вы выберете.Затем вы можете использовать CAMWORKSADDINLib для взаимодействия с этим.Спасибо за предложение, это идеальное решение для моей проблемы.

...