«Marshal.GetActiveObject» выдает COMException при получении ссылки на CorelDRAW - PullRequest
0 голосов
/ 21 июня 2019

Я занимаюсь разработкой макроса / приложения в VB.NET для выполнения некоторых операций над открытым в настоящее время документом в CorelDRAW (версия 2018 года).Я пытаюсь использовать следующий код для использования GetActiveObject() для получения ссылки на текущий открытый экземпляр Corel:

Dim ActiveCorelApp As Corel.Interop.VGCore.Application = Nothing
Try
    ActiveCorelApp = System.Runtime.InteropServices.Marshal.GetActiveObject("CorelDRAW.Application.20")
Catch ex As Exception
    MsgBox("Error4:  Could not get the active CorelDRAW.Application object.  Make sure CorelDRAW is running.")
End Try

В настоящее время это приложение использует точно такой же метод для получения ссылок на оба AutodeskInventor и AutoCAD без проблем.

Я нашел ссылки на запуск как целевого приложения (в данном случае Corel), так и Visual Studio в режиме администратора для решения этой проблемы.Однако никакая комбинация запуска Visual Studio и / или Corel в режиме администратора не имела значения.

Я пробовал много разных строк с именами объектов, но после проверки в реестре выясняется, что "CorelDRAW.Application.20" является правильным.

Я загрузил программу просмотра ROT (Таблица текущих объектов), и Corel не отображается в списке.Кажется (согласно другим сообщениям на форуме), что некоторые программы испытывают проблемы с регистрацией в ROT сразу после запуска и требуют, чтобы приложение потеряло фокус окна и восстановило его до того, как оно зарегистрируется.Выполнение аналогичных действий (сворачивание / восстановление, переключение на другую программу и обратно) в CorelDRAW не дало никаких результатов.

Я получаю следующую ошибку:

System.Runtime.InteropServices.COMException: 'Операция недоступна (исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))'

...