Как ссылаться на активный документ в Solidworks при наличии нескольких экземпляров

Я использую следующий код в Solidworks 2017 Visual Studio Tools for Applications. Это Microsoft Visual Studio 2005 версии 8.0.50727.42 под управлением Microsoft Visual Basic 2005 и Microsoft .NET Framework версии 2.0.50727 SP2.

 Public Sub Reference_GetCurrentPartorAssembly(ByRef CurrentFile As SolidWorks.Interop.sldworks.ModelDoc2)

        CurrentFile = swApp.ActiveDoc

        If IsNothing(CurrentFile) Then Throw New Exception("Could not get reference to current part or assembly.")

    End Sub

Как правило, код работает нормально. Однако иногда существуют дополнительные экземпляры Solidworks, которые перечислены в списке "фоновых процессов" в диспетчере задач Windows. Когда это происходит, мой код выдает исключение. Чтобы заставить мой код выполняться без исключения, мне нужно найти случайный фоновый процесс Solidworks и принудительно уничтожить его с помощью диспетчера задач.

(Понятия не имею, почему появляются эти фоновые версии Solidworks.)

Я не нашел документацию Solidworks по ActiveDoc очень полезной: http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~activedoc.html?verRedirect=1

У меня вопрос: как я могу получить ссылку на текущий документ без принудительного уничтожения этих фоновых процессов? Я пытался найти другие способы получить ссылку на активный документ, но большинство примеров кода, которые я нашел, все используют ActiveDoc.

1 ответ

По моему опыту, несколько экземпляров SolidWorks могут нормально работать, я не думаю, что фоновая версия SolidWork повлияет на вашу основную версию. Как я понимаю, вы запускаете макрос, а не надстройку, поэтому убедитесь, что вы запускаете VSTS из основной версии Solidworks. Может быть, каким-то образом ваш макрос выполняется на одной из фоновых версий, у которой явно нет activedoc.

Также я бы посмотрел на фоновые случаи, если вы не запускаете их - нет причин для их выполнения, попробуйте сделать заметку, в какой момент они появляются, чтобы попытаться определить причину.

Другие вопросы по тегам