小编Dav*_*ner的帖子

在 C# 中比较非托管函数指针的替代方法是什么(如何修复 CS8909)?

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#

7
推荐指数
1
解决办法
410
查看次数

标签 统计

c# ×1