Здравствуйте, Aniskin, Вы писали:
AG>>При этом, код в 7z.dll также как-то связан и с дополнительным потоком?
A>Дополнительный поток создается в 7z.dll, такая у него архитектура. В этом дополнительном потоке 7z.dll вызывает callback функцию для получения файлового потока, которые нужно упаковать.
Вот оно что.
Предполагаю, что для ан-маршаллинга требуется обработать входящий COM-вызов в маршаллящем потоке.
Для такого обычно используют CoWaitForMultipleHandles вместо обычных Wait-функций.
Поскольку 7z.dll не будет использовать CoWaitForMultipleHandles, предлагаю в своём IDropTarget::Drop стартовать свой поток, который уже вызовет ту самую функцию из 7z.dll, и этот свой поток тут же ждать через CoWaitForMultipleHandles.
A>При этом сам дополнительный поток имеет не инициализированный COM, и вызов CoInitialize произвожу я в callback функции.
Ну это ничего, только, разумеется, CoUninitialize следует вызвать до возврата из callback функции, и к моменту этого вызова CoUninitialize не должно быть ссылок на COM интерфейсы, полученные в callback-функции.