2016-08-25 8 views
2

Мне нужно вызвать некоторые системные API, которые поддерживаются только с Windows Vista или Windows 2008 Server. Итак, я использую DllImport и вызывая эти методы. Однако мое приложение WPF также должно поддерживать более старые платформы (хотя и очень мало клиентов). Итак, мой план состоит в том, чтобы сначала обнаружить операционную систему, а затем отобразить другой экран вместо вызова этих неподдерживаемых API. Но я хочу знать ожидаемое поведениеЧто произойдет, если у меня есть DllImport (C# .NET) для API, не поддерживаемого версией операционной системы

  • Применяется ли приложение не загружать или даже запускать на старых платформах по мере отказа DllImport? Я не мог найти документацию об этом.

Если это так, мне придется либо полностью избегать использования этих API, либо создавать отдельную версию приложения для старых операционных систем.

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

+0

Я бы выбрал разные «версии» программы, вместо того чтобы пытаться заставить программу работать с любой версией S.O. – Jauch

+0

Нет, это совершенно нормально. Это то, на что предполагается использовать DllImport. Обратите внимание, что обнаружение версии затруднено; предпочитают пытаться вызвать функцию и отказ в работе. –

+0

Ожидается, что вы проверите OSVersion и отобразите другой экран, чтобы вызов api не прерывался с исключением. И что вы на самом деле протестируете это на старой ОС. Довольно непонятно, почему это должно быть изложено, в чем смысл этого вопроса? –

ответ

2

Сборка будет загружаться без проблем. Вызов импортированной неуправляемой функции повысит значение EntryPointNotFoundException.

См. Примечания к документации по исключению: here. В нем указано, что исключение возникает, если:

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

Таким образом, вы можете просто обернуть вызов функции в try - catch и обрабатывать случаи, когда функция нет так.