2015-12-20 2 views
1

Я сделал много исследований, но я не нашел ответа. Если я создаю DLL, используя WINAPI с Windows 10, будет ли он работать с Windows 8, 7 и т. Д.?Коды, построенные на более высоких версиях Windows, работают на более низких версиях Windows?

Я имею в виду, что я должен включать заголовочный файл Windows, поэтому он конфликтует с более низкими версиями Windows?

Или это касается функций, которые вы используете?

(если я использую функцию, которая работает на всех версиях Windows, будет ли DLL работать на всех версиях Windows?)

+1

Это зависит от того, какие функции вы вызываете и как вы связываете свою DLL. Возможно, он работает на более низких версиях, может быть, нет. Невозможно сказать отсюда. –

+2

Попросите компилятор сказать, доступен ли API в вашей минимальной целевой версии, установив целевую платформу ('WINVER' и' _WIN32_WINNT'). См. [Использование заголовков Windows] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745.aspx) и [Изменение WINVER и _WIN32_WINNT] (https://msdn.microsoft.com/ en-us/library/6sehtctf.aspx). – IInspectable

ответ

-1

Я имею в виду, что я должен включать заголовочный файл Windows, поэтому он конфликтует с более низкими версиями Windows?

Или это касается функций, которые вы используете?

Это зависит от функций, которые вы используете. Обычно новые функции отмечены Ex. Microsoft оставляет старый код совместимым, поэтому все старые функции остаются. Вы просто должны научиться, если функции, которые вы используете, слишком молоды и заменяют их более старыми, если они есть.

(если я использую функцию, которая работает на всех версиях Windows, будет в DLL работать на всех версиях Windows?)

Если вы используете современный компилятор будет связать библиотеки DLL против современного с или CPP библиотеки времени выполнения, поэтому проверьте, какие библиотеки вы используете. Если вы используете vs 2015, существует даже опция, позволяющая вам скомпилировать ваш код с совместимостью с Windows XP.

+0

'Ex' на самом деле не очень показатель, так как были некоторые функции« Ex »еще в Windows 95! –

+0

Ex stand for Extended (и он может ссылаться на более продвинутый). и как MulDiv может быть смешным? – milevyo

+0

Варианты «Ex» были введены во время перехода с 16-разрядной Windows на 32-разрядную Windows (то есть на Windows 95). API, которые поддерживаются по соображениям совместимости, явно помечены как таковые (например, [GetProfileInt] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724360.aspx)). [MulDiv] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383718.aspx) не является ни устаревшим, ни смешным. – IInspectable

1

Это зависит от функций Win32 вы использовали. См. В MSDN, с какой версии Windows функция существует - она ​​написана в конце описания. Большинство функций Win32 существуют с Windows95 раз или даже раньше. Но недавние версии VS (2003+) генерируют код, совместимый с Windows 2000 и новее.

0

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

Обратите внимание, что в общем случае вы также можете избежать использования 64-битной версии и создать приложение как 32-разрядное (это будет работать и на 64-разрядной версии, но 64-разрядное приложение никогда не будет работать на 32- бит Windows).

Смежные вопросы