如果操作系统版本不支持DllImport(C#.NET)的API,会发生什么

如果操作系统版本不支持DllImport(C#.NET)的API,会发生什么,c#,.net,windows,native,dllimport,C#,.net,Windows,Native,Dllimport,我需要调用一些系统API,这些API仅在Windows Vista客户端或Windows 2008 Server之后才受支持。所以,我使用DllImport并调用这些方法。但是,我的WPF应用程序还必须支持较旧的平台(尽管很少有客户端)。因此,我的计划是首先检测操作系统,然后显示不同的屏幕,而不是调用那些不受支持的API。但我想知道预期的行为 当DllImport出现故障时,应用程序是否会无法加载,甚至无法在较旧的平台上运行?我找不到关于这个的任何文档 如果是这样的话,那么我要么完全避免使用

我需要调用一些系统API,这些API仅在Windows Vista客户端或Windows 2008 Server之后才受支持。所以,我使用DllImport并调用这些方法。但是,我的WPF应用程序还必须支持较旧的平台(尽管很少有客户端)。因此,我的计划是首先检测操作系统,然后显示不同的屏幕,而不是调用那些不受支持的API。但我想知道预期的行为

  • 当DllImport出现故障时,应用程序是否会无法加载,甚至无法在较旧的平台上运行?我找不到关于这个的任何文档
如果是这样的话,那么我要么完全避免使用这些API,要么为旧的操作系统构建一个单独的应用程序版本


稍后我会亲自测试,并在这里进行相应的更新。但是,有谁能告诉我处理此问题的建议方法吗?

程序集将毫无问题地加载。调用导入的非托管函数将引发错误

请参阅异常文档的备注:。它指出,如果出现以下情况,将引发异常:

无法解析对Windows DLL中函数的调用,因为找不到该函数


因此,您可以简单地将对函数的调用包装在一个
try
-
catch
中,并处理函数不以这种方式出现的情况。

我会选择不同的“版本”的程序,而不是试图使程序在任何版本的S.O.No,这完全可以。这就是DllImport的用途。注意,版本检测很难;更喜欢尝试调用函数并处理失败。希望您检查OSVersion并显示不同的屏幕,以便api调用不会因异常而失败。你将在一个旧的操作系统上进行测试。非常不清楚为什么要解释这个问题,这个问题的重点是什么?在运行时调用
DllImport
函数将触发错误,
EntryPointNotFoundException
。因此,您可以选择不调用当前平台上未实现的函数。感谢Cody Gray和David Hefferman。从您的回答来看,在调用函数之前,应用程序似乎不会崩溃或抛出异常。