CS0212使用带有不安全代码的dll时出错:只能在固定语句初始值设定项中获取未固定表达式的地址



(不完整(片段

unsafe class MainWindow
{
...
IntPtr somePtr = IntPtr.Zero;
unsafe private void Click(object sender, RoutedEventArgs e)
{
NamespaceFromReferencedUnsafeDll.SomeFunction(&somePtr)
}
...
}

}

应该从具有不安全代码的托管Dll调用SomeFunction,以设置指针somePtr,但导致编译器错误

CS0212:您只能在内部获取未固定表达式的地址固定语句初始值设定项的

根据这个答案,fixed关键字必须以某种方式使用,但

fixed(IntPtr somePtr = IntPtr.Zero);

没有帮助。

我该如何解决这个问题(并非双关语(?

问题在于的签名

SomeFunction 

在引用的不安全dll中。

更换后

public static unsafe uint SomeFunction(IntPtr* somePtr)

public static unsafe uint SomeFunction(out IntPtr somePtr)

摘录

class MainWindow
{
...
IntPtr somePtr = IntPtr.Zero;
private void Click(object sender, RoutedEventArgs e)
{
NamespaceFromReferencedUnsafeDll.SomeFunction(out somePtr)
}
...
}

编译时没有错误,并在运行时工作。

相关内容

  • 没有找到相关文章

最新更新