У меня есть сервер автоматизации , размещенный VB6 exe.Заставить COM-сервер оставаться открытым
COM API используется из Excel VBA:
Dim o as MyCOMAPI.MyCOMType
Set o = new MyCOMAPI.MyCOMType
o.DoSomething
Когда я создаю объекты в VBA Исполняемый файл запускается вместе с автоматизацией COM и VBA можно использовать API.
Но exe быстро закрывается и «случайно» Excel, я думаю, когда Excel решит, что он больше не нужен COM API.
Это поведение вызывает случайные ошибки.
Простым решением является запуск exe перед запуском кода VBA; в этом случае все работает нормально, так как exe не останавливается, пока пользователь не закрыт.
Есть ли у вас какая-либо информация/документация о том, как Excel VBA управляет вызовами размещенных API?
Есть ли способ избежать такого поведения и сохранить exe до тех пор, пока код VBA не решит его остановить?
Спасибо за ваш ответ. Я пробовал аналогичный шаблон, обнажая открытый объект в выделенном модуле, но я думаю, что даже в этом случае объект может быть удален Excel. Поэтому, возможно, мне стоит оставить ссылку на него во всех моих модулях, но я не уверен, что этого будет достаточно. В любом случае вы получите мой +1, и если нет другого ответа, я соглашусь с ним. – Pragmateek
Excel будет * не * закрывать EXE, если есть выдающаяся переменная, относящаяся к объекту из вашего EXE. И обратите внимание, что просто выполнение глобального 'Dim v As New Libname.myClass' будет * не * работать - это не делает то, что думает большинство людей (http://stackoverflow.com/q/2478097/2230). Вы должны «Установить» его вручную из функции или Sub. –