Я создаю экземпляр COM-объекта из сценария VBA в Excel, как это определено в C # DLL. Класс C #, который я создаю, имеет финализатор, который выполняет сборку мусора, особенно другие объекты MS Office, на которые он ссылается, которые, как я должен видеть, появляются и исчезают в диспетчере задач. Фактически, модульные тесты демонстрируют, что процесс Office появляется при вызове dll, и исчезает, когда он завершается.
Когда dll вызывается из VBA, я заметил, что процессы остаются открытыми после завершения функции VBA, то есть объект не очищается после вызова, что приводит меня к мысли, что VBA не освобождает объект COM.
Моя функция выглядит примерно так:
Function Raz(inp As String)
Dim o: Set o = CreateObject("foo.bar")
o.InputFields.FirstInput = inp
o.Update
Raz = o.OutputFields.FirstOutput
End Function
Я добавил следующую строку в конце функции для решения проблемы:
set o = Nothing
Однако ресурсы в моем процессе COM остаются после выполнения и завершения моего VBA-сценария. Как собрать мусор из COM-объектов из VBA, не создавая вручную вызов dispose?