Асинхронные вызовы из C в COM-компонент, импортированный через TLB

#c #asynchronous #com #typelib

#c #асинхронный #com #typelib

Вопрос:

У меня есть #import отредактированный внешний компонент, который предоставляет методы, вызов которых довольно дорог (типичное выполнение занимает от нескольких секунд до нескольких минут). До сих пор я вызывал компонент из отдельного рабочего потока, но я обнаруживаю, что все больше внедряю оригинальный интерфейс в протокол связи между UI и worker, чего я бы предпочел избегать из-за дублирования кода.

В другом проекте я использовал асинхронные вызовы методов для обработки этого, однако на этот раз я не определил интерфейс, поэтому я не могу установить для него [async_uuid] атрибут.

Есть ли способ повторно использовать определение интерфейса в TLB для выполнения асинхронных вызовов во внешний компонент?

Комментарии:

1. Не поможет, если COM-компонент является STA. Все асинхронные вызовы будут помещены в очередь

2. Это вполне приемлемо. Текущая реализация представляет собой асинхронный вариант с ручным кодированием тех частей, которые я использовал из существующего интерфейса. Поскольку компилятор MIDL может автоматически генерировать асинхронные интерфейсы, если указано, я хотел бы знать, могу ли я использовать это, чтобы сократить усилия и избежать ошибок.