#c #asynchronous #com #typelib
#c #асинхронный #com #typelib
Вопрос:
У меня есть #import
отредактированный внешний компонент, который предоставляет методы, вызов которых довольно дорог (типичное выполнение занимает от нескольких секунд до нескольких минут). До сих пор я вызывал компонент из отдельного рабочего потока, но я обнаруживаю, что все больше внедряю оригинальный интерфейс в протокол связи между UI и worker, чего я бы предпочел избегать из-за дублирования кода.
В другом проекте я использовал асинхронные вызовы методов для обработки этого, однако на этот раз я не определил интерфейс, поэтому я не могу установить для него [async_uuid]
атрибут.
Есть ли способ повторно использовать определение интерфейса в TLB для выполнения асинхронных вызовов во внешний компонент?
Комментарии:
1. Не поможет, если COM-компонент является STA. Все асинхронные вызовы будут помещены в очередь
2. Это вполне приемлемо. Текущая реализация представляет собой асинхронный вариант с ручным кодированием тех частей, которые я использовал из существующего интерфейса. Поскольку компилятор MIDL может автоматически генерировать асинхронные интерфейсы, если указано, я хотел бы знать, могу ли я использовать это, чтобы сократить усилия и избежать ошибок.