C#9 引入了非托管函数指针(例如delegate* unmanaged[Cdecl]<void>)。我一直在尝试这些以了解它们是如何工作的。升级到.NET 5.0.201后,我收到一个新警告:
error CS8909: Comparison of function pointers might yield an unexpected result, since pointers to the same function may be distinct.
Run Code Online (Sandbox Code Playgroud)
根据这个问题,多次引用托管函数可能并不总是产生相同的指针。
以下是可能触发此警告的代码类型示例:
// saves a function pointer in unmanaged code
[DllImport("mylib", CallingConvention = CallingConvention.Cdecl)]
static extern void set_func(delegate* unmanaged[Cdecl]<void> func);
// retrieves the function pointer that was saved above
[DllImport("mylib", CallingConvention = CallingConvention.Cdecl)]
static extern delegate* unmanaged[Cdecl]<void> get_func();
// unmanaged function implemented in C#
[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvCdecl) })]
static void …Run Code Online (Sandbox Code Playgroud) c# ×1