Использовать COM-интерфейс без статической привязки к библиотеке

Это может быть немного вопрос новичка, но я просто не знаю! Чтобы использовать функцию в DLL, которая может отсутствовать в системе, я могу использовать LoadLibrary, а затем GetProcAddress. Но как я могу сделать то же самое для COM-интерфейса? Я могу включить заголовочный файл для объявлений, IID и т. д., но я не хочу связываться с сопроводительной библиотекой, используя #pragma comment(lib, "blabla.lib").

(Я пытаюсь использовать интерфейс WICImagingFactory, и для компиляции требуется ссылка на windowscodecs.lib)

Спасибо


person demorge    schedule 22.09.2011    source источник


Ответы (1)


Нет необходимости бороться против связывания windowscodecs.lib. Связывание с ним не приводит к неявному связыванию, как это было бы для библиотеки, отличной от COM.

Вам по-прежнему необходимо вызывать CoCreateInstance() так же, как и для любого COM-объекта. Думайте об этом как о привязке во время выполнения, эквивалентной GetProcAddress.

person David Heffernan    schedule 22.09.2011
comment
Ха! Вы правы, я переименовал C:\Windows\System32\WindowsCodecs.dll в C:\Windows\System32\WindowsCodecs.bak (после того, как стал владельцем grrr), и мое приложение работает нормально, за исключением того, что CoCreateInstance дает сбой, что не проблема, у меня есть какой-то резервный механизм для старых добрых функций GDI :) Большое спасибо! - person demorge; 22.09.2011
comment
Вы можете добиться успеха CoCreateInstance, обновив записи реестра для вашего CLSID, чтобы они указывали на WindowsCodecs.bak :) - person i_am_jorf; 22.09.2011
comment
Хорошо, приятно знать, но я просто проверял, как мое приложение будет реагировать, когда WindowsCodecs.dll не будет найден, и его полное удаление казалось таким грубым;) - person demorge; 22.09.2011