Я уже довольно давно использую динамические библиотеки и прочее GetProcAddress, но это всегда кажется утомительным, интеллигентным, враждебным и уродливым способом.
Кто-нибудь знает чистый способ импортировать новые функции, оставаясь совместимым со старыми ОС.
Скажем, я хочу использовать библиотеку XML, которая является частью Vista. Я вызываю LoadLibraryW и затем могу использовать функции, если HANDLE не равен нулю.
Но я действительно не хочу идти #typedef (void*)(PFNFOOOBAR)(int, int, int)
и PFNFOOOBAR foo = reinterpret_cast<PFNFOOOBAR>(GetProcAddress(GetModuleHandle(), "somecoolfunction"));
, все это время 50, в путь.
Есть ли нехакское решение, с помощью которого я мог бы избежать этого беспорядка?
Я думал о добавлении coolxml.lib в настройках проекта, затем включении coolxml.dll в список dll delayload и, возможно, копировании нескольких сигнатур функций, которые я буду использовать в нужном файле. Затем проверка возврата LoadLibraryW с ненулевым значением, а если он не нулевой, то переход к ветви Vista, как в обычном потоке программы.
Но я не уверен, могут ли LoadLibrary и задержка загрузки работать вместе, и не предсказывает ли ветвление в некоторых случаях.
Кроме того, не уверен, что этот подход будет работать, и не вызовет ли он проблем после обновления до следующего SDK.