У меня есть программа, которая использует какое-то соединение Ole для установления соединения с программным обеспечением Cam/cad Powershape. Он использует переменную класса для соединения с powershape, и ее свойства содержат информацию об открытых моделях.Как завершить/уничтожить переменную класса
Проблема в том, что это соединение заканчивается только тогда, когда переменная класса завершается или выходит за рамки.
Dim powershapeRoot As New PSAutomation(Delcam.ProductInterface.InstanceReuse.UseExistingInstance)
Это прекрасно работает внутри Subs, поскольку она выходит за рамки, но эта программа требует от вас сделать это несколько раз, когда вам необходимы данные из PowerSHAPE и это может занять некоторое время, чтобы каждый раз, когда снова выполните подключение. Таким образом, вы можете сделать глобальную переменную, так что вам потребуется только одно соединение.
Dim powershapeRoot As New PSAutomation(Delcam.ProductInterface.InstanceReuse.UseExistingInstance)
Powershapeglobal = powershapeRoot
Но теперь переменная выходит за рамки только после закрытия программы. Я пытался использовать:
Powershapeglobal.dispose
Powershapeglobal = nothing
Это не помогло, и соединение все еще кажется существующим, поскольку переменная все еще существует? Как вы уничтожаете переменную навсегда?
В VBA вы будете использовать «Set» ключевое слово, чтобы установить объект variabile на «Ничего» – user3598756
Помимо правильно рилизинг объект COM, так что указатель больше не существует, то вы должны также освободить объект для GC , Эндрю Уайтчепел достаточно хорошо описывает в своей книге соответствующий отрывок в разделе о выпуске COM-объектов: https://msdn.microsoft.com/en-us/library/office/aa679807(v=office.11).aspx –
Это звучит как ошибка в классе PSAutomation, на который вы полагаетесь. Правильно спроектированный и реализованный класс будет использовать шаблон IDisposable для этого. –