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

Я использую следующий код в инструментах Solidworks 2017 Visual Studio для приложений. Это 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.


person abqsteve    schedule 31.01.2018    source источник
comment
Я хотел бы спросить, как вы подключаетесь к объекту SldWorks. Похоже, вы могли подключаться к одному из этих фоновых экземпляров, и у вас нет активного документа, и поэтому он возвращается как нуль.   -  person AndrewK    schedule 08.02.2018


Ответы (1)


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

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

person Vlad    schedule 31.01.2018
comment
Насколько я могу судить, я запускаю макрос из версии Foreground. Я полагаю, что вы можете быть правы в том, что макрос выполняется в фоновой версии, в которой нет активного документа. - person abqsteve; 02.02.2018