Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Marshal.GetFunctionPointerForDelegate在.NET内核中工作,但在.NET Framework中不工作_C#_.net_.net Core - Fatal编程技术网

C# Marshal.GetFunctionPointerForDelegate在.NET内核中工作,但在.NET Framework中不工作

C# Marshal.GetFunctionPointerForDelegate在.NET内核中工作,但在.NET Framework中不工作,c#,.net,.net-core,C#,.net,.net Core,我正在测试一个用C#编写的SDK,它附带了一个用.NETCore2.0编写的演示控制台应用程序。我试图在WPF中复制该应用程序,并尽可能保持代码不变。我在对SDK API的方法调用中得到了这个异常,该方法添加了某些回调:无法封送“参数#3”:无法封送泛型类型。这是通过在方法内部调用Marshal.GetFunctionPointerForDelegate实现的。我没有更改任何代码,它在他们的演示应用程序中工作,并在我的应用程序中引发异常。下面是方法调用: _tracking_callback_i

我正在测试一个用C#编写的SDK,它附带了一个用.NETCore2.0编写的演示控制台应用程序。我试图在WPF中复制该应用程序,并尽可能保持代码不变。我在对SDK API的方法调用中得到了这个异常,该方法添加了某些回调:无法封送“参数#3”:无法封送泛型类型。这是通过在方法内部调用Marshal.GetFunctionPointerForDelegate实现的。我没有更改任何代码,它在他们的演示应用程序中工作,并在我的应用程序中引发异常。下面是方法调用:

_tracking_callback_id =
            video_worker.addTrackingCallback(
                TrackingCallback,
                this);
下面是API中定义的回调本身:

public delegate void TrackingCallback(int stream_id, int frame_id, List<RawSample> samples, List<bool> samples_weak, List<float> samples_quality, object userdata);
public delegate void TrackingCallback(int stream\u id,int frame\u id,List samples\u弱,List samples\u质量,object userdata);

当我为他们的演示制作.NET Framework控制台应用程序副本时,也会发生这种情况,这表明它与.NET Core有关,但我不确定是什么。

将代理的副本放在静态变量(或与
视频工作者
寿命相同的变量)中,否则GC将释放委托。从非托管数据创建
列表
,这让我非常困惑。这不是问题所在,但它究竟是从哪里获得集合大小的?CoreCLR有自己的功能,可能与WinRT类型的投影有关。但在桌面CLR版本中,这显然是不可能的。你所能做的就是联系SDK提供商,告诉他们“嘿,这在WPF中不起作用”。也要问一下集合的大小,它太臭了。@HansPassant我向SDK提供商报告了这个问题,他们承认这是他们代码中的一个bug,他们会在下一个SDK版本中修复它。