在非 Windows 平台上探测 P/Invokes 期间,.NET 运行时不再为函数导出名称添加 A
或 W
后缀。
已引入的版本
5.0
更改描述
Windows 具有向 Windows SDK 函数名称添加 A
或 W
后缀的约定,这些名称分别对应于 Windows 代码页和 Unicode 版本。
在较早版本的 .NET 中,CoreCLR 和 Mono 运行时在 P/Invokes 的导出发现期间,会在A
向导出名称添加W
或后缀。
而对于 .NET 5 及更高版本,在导出发现过程中,仅在 Windows 上向导出名称添加 A
或 W
后缀。 在 Unix 平台上,不会添加后缀。 Windows 平台上两个运行时的语义保持不变。
更改原因
此更改旨在简化跨平台探测。 由于非 Windows 平台不包含此语义,因此不应产生开销。
建议的措施
若要缓解更改,可以在非 Windows 平台上手动添加所需的后缀。 例如:
[DllImport(...)]
extern static void SetWindowTextW();