(不完整(片段
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)
}
...
}
编译时没有错误,并在运行时工作。