Использовать две разные версии файла .lib в одном проекте C ++? - PullRequest
0 голосов
/ 07 июля 2011

Я работаю над программой Volume Shadow Copy. Я только что узнал, что мне нужно использовать другой набор файлов .h (vsbackup.h) и связанных файлов .lib (vssapi.lib) для компиляции проекта для Windows XP (по сравнению с Vista и 7). Это связано с серией тонких изменений в файлах .h: в XP вызов, такой как CreateVssBackupComponents(), был вызовом API (в vsbackup.h было только объявление); более поздний vsbackup.h изменяет это на CreateVssBackupComponents() { CreateVssBackupComponentsInternal(); }, и когда я компилирую свой проект с новыми файлами .h и .lib и запускаю программу под XP, он говорит:

Точка входа в процедуру «CreateVssBackupComponentsInternal» не найдена в DLL «vssapi.dll».

Есть ли возможность объединить эти два разных файла lib в одном проекте, чтобы мне не нужно было компилировать две разные версии программы?

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Если вам нужно работать с двумя разными версиями dll (потому что, если я правильно понял, что проблема заключается в том, что разные библиотеки / заголовки являются лишь верхушкой айсберга), вы должны динамически загрузить его с помощью LoadLibrary, проверьтеналичие необходимых точек входа с помощью GetProcAddress и вызов нужных функций с указателем функции, который он возвратил.

1 голос
/ 14 июля 2011

Вы также можете создать две конфигурации проекта, одну для XP и одну для более новых версий Windows.Затем добавьте оба файла в свой установщик и позвольте установщику проверить, в какую версию Windows он устанавливает и выбрать правильную версию вашей программы.(Это в основном то, что я сделал, когда у меня возникла ваша проблема)

Хотя более правильным решением было бы поместить его в DLL, создать две версии этой DLL, а затем проверить во время выполнения и загрузить нужную DLL.Таким образом, обновление Windows не вызовет проблем.

0 голосов
/ 07 июля 2011

Лично, когда библиотеки начинают становиться немного сумасшедшими /, я начинаю изучать предоставление проблемным библиотекам собственного процесса и использую какой-то RPC для взаимодействия с ними.

...