C++ Загрузки статической библиотеки.

163
03 ноября 2018, 15:40

Добрый день я являюсь новичком в области C++ и тут возникла интересная проблема совместимости новых библиотек со старыми ОС. Например есть некий код который использует типы из dxgi.lib, например

#include "stdafx.h"
#include "dxgi.h"
int main()
{
    DXGI_SURFACE_DESC surface;
    return 0;
}

.exe cкомпилированый с помощью Toolset v90, будет работать на всех ОС Windows где будет найдена соответствующая библиотека. Но например при попытке запуска этого .exe на Windows Vista, будет выдана соответствующая ошибка.

Не найдено dxgi.dll.

Почему .dll? Я могу ошибаться но из информации в интернете dxgi.lib это вроде бы как статическая заглушка для динамической версии dxgi.dll.

Возможно ли в коде как-то проверять что данная библиотека с данным типом не доступна, и уже например использовать другую библиотеку. С динамической библиотекой вроде бы более менее понятно, но что делать со статической заглушкой к динамической библиотеке. К тому же нет возможности изменять dxgi.lib и dxgi.dll тоже.

Answer 1

Ваша проблема возможно связана с самой операционной системой на которой вы запускаете ваше приложение.

В документации к DXGI говорится о том что минимальной поддерживаемой версией является Windows Vista, но не говорится о сервис паках или еще какой либо дополнительной информации.

Дополнение к комментарию.

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

Псевдокод:

if(CheckDXGISuppport())
{
    LoadLibrary("my_super_dxgi_interface.dll");
    ...
}

Где my_super_dxgi_interface.dll может статически линковаться с библиотекой/интерфейсом DXGI.

Answer 2

dxgi.lib - это статическая библиотека импорта из dll. То бишь она сделана для возможности прилинковать dxgi.dll без наличия этой самой dll.

DXGI поддерживается начиная с Windows Vista. Кроме того, для Windows Vista доступно обновление Platform Update, устанавливающее компоненты DXGI и DirectX11, соответствующие Windows 7.

READ ALSO
Как импортировать в .odt? Qt

Как импортировать в .odt? Qt

Как лучше импортировать вodt из Qt? Есть много примеров как в Word импортировать, но в

143
Проверка корректности ввода

Проверка корректности ввода

В модальном окне есть два поля ввода QLineEditВ первом вводится количество элементов и на него установлен QIntValidator, то есть кроме целого числа...

163
Рекурсивное вычисление высоты дерева

Рекурсивное вычисление высоты дерева

Написала функцию Hight(int r, int *mas), которая должна вычислять высоту дереваДерево представляется в виде массива чисел, где mas[i] = это родитель i - го ребенка

168
Как с помощью глобального хука отменить действие мыши?

Как с помощью глобального хука отменить действие мыши?

Есть мысль написать ремапер мышиНо для этого необходимо отменять определённые действия мыши

205