Как заставить Excel (2007) VBA выпускать ссылки на объект COM-сервера?Как выпустить inprocess COM-объект сервера из Excel VBA
Я написал COM-сервер inprocess (Single instance DLL) в Visual Foxpro 9 SP2, который был создан из кода Excel VBA на моей машине разработки. Кажется, что в Excel есть ссылка на COM-объект/dll, хотя я его установил = Nothing. Это мешает мне перестроить DLL из-за сообщения «Запрет доступа к файлам TestCOM.dll» до тех пор, пока я не выйду из Excel, который является болью каждый раз, когда я хочу внести изменения и протестировать его.
Я вареный код вниз к очень простой схеме испытаний: Проект VFP9 (TestCOM) имеет только один .prg файл со следующим содержимым
DEFINE CLASS TestClass As Session OLEPUBLIC
ENDDEFINE
УВА код выглядит следующим образом:
Sub Test()
Set objTest = CreateObject("TestCOM.TestClass")
Set objTest = Nothing
End Sub
Я попытался удалить ссылку на библиотеку COM-сервера в проекте VBA, но это не имеет никакого значения. Я пробовал с и без DIMing переменных объекта, и это не имеет никакого значения. Я попытался создать новый проект VFP DLL, но проблема не устранена.
Если я создаю приложение/dll VFP как INPROCESS/DLL и запускаю код VBA, я получаю эту проблему, но если я создам его как OUTOFPROCESS/EXE и запустим код VBA, я НЕ получаю эту проблему.
Я нашел очень похожую проблему в COM Object Cleanup, за исключением того, что мой COM-сервер написан на Visual Foxpro 9 с пакетом обновления 2 (SP2), тогда как это относится к C#, и OP не объяснил подробно, обойти его; если это возможно.
Для любых других читают эту тему я впоследствии понял, что если проект будет построен как вне процесса (EXE) COM-сервер, то вы можете только восстановить проект без выхода из Excel, если у вас нет ссылки на библиотеку типов в VBA/Excel. – Caltor