如果我有操作系统版本不支持的 API 的 DllImport (C# .NET) 会发生什么
What happens if I have DllImport (C# .NET) for an API not supported by the operating system version
我需要调用一些系统 API,只有 Windows Vista 客户端或 Windows 2008 Server 以后才支持这些 API。所以,我正在使用 DllImport 并调用这些方法。但是,我的 WPF 应用程序还必须支持旧平台(尽管客户端很少)。所以,我的计划是先检测操作系统,然后显示不同的屏幕,而不是调用那些不受支持的 API。但我想知道预期的行为
- 应用程序是否会因 DllImport 失败而无法加载甚至 运行 在较旧的平台上?我找不到任何关于此的文档。
如果是这种情况,那么我将不得不完全避免使用这些 API,或者必须为旧操作系统构建一个单独的应用程序版本。
我稍后会自己测试这个并相应地更新在这里。但是,任何人都可以指导我处理此问题的推荐方法吗?
程序集将毫无问题地加载。调用导入的非托管函数将引发 EntryPointNotFoundException
.
查看异常文档的备注:here。它声明在以下情况下引发异常:
The call to a function in a Windows DLL cannot be resolved because the function cannot be found.
因此您可以简单地将对函数的调用包装在 try
-catch
中,并以这种方式处理函数不存在的情况。
我需要调用一些系统 API,只有 Windows Vista 客户端或 Windows 2008 Server 以后才支持这些 API。所以,我正在使用 DllImport 并调用这些方法。但是,我的 WPF 应用程序还必须支持旧平台(尽管客户端很少)。所以,我的计划是先检测操作系统,然后显示不同的屏幕,而不是调用那些不受支持的 API。但我想知道预期的行为
- 应用程序是否会因 DllImport 失败而无法加载甚至 运行 在较旧的平台上?我找不到任何关于此的文档。
如果是这种情况,那么我将不得不完全避免使用这些 API,或者必须为旧操作系统构建一个单独的应用程序版本。
我稍后会自己测试这个并相应地更新在这里。但是,任何人都可以指导我处理此问题的推荐方法吗?
程序集将毫无问题地加载。调用导入的非托管函数将引发 EntryPointNotFoundException
.
查看异常文档的备注:here。它声明在以下情况下引发异常:
The call to a function in a Windows DLL cannot be resolved because the function cannot be found.
因此您可以简单地将对函数的调用包装在 try
-catch
中,并以这种方式处理函数不存在的情况。