El fragmento (incompleto)
unsafe class MainWindow { ... IntPtr somePtr = IntPtr.Zero; unsafe private void Click(object sender, RoutedEventArgs e) { NamespaceFromReferencedUnsafeDll.SomeFunction(&somePtr) } ... }}
Se supone que debe llamar a SomeFunction desde una Dll administrada con código no seguro, para establecer el puntero somePtr , pero da como resultado el error del compilador
CS0212: solo puede tomar la dirección de una expresión no fija dentro de un inicializador de declaración fija
De acuerdo con esta respuesta , la palabra clave fixed debe usarse de alguna manera, pero
fixed(IntPtr somePtr = IntPtr.Zero);no ayudó
¿Cómo puedo arreglar esto (sin juego de palabras)?
El problema era la firma de
SomeFunctionen el dll inseguro al que se hace referencia.
Después de cambiar
public static unsafe uint SomeFunction(IntPtr* somePtr)para
public static unsafe uint SomeFunction(out IntPtr somePtr)el fragmento
class MainWindow { ... IntPtr somePtr = IntPtr.Zero; private void Click(object sender, RoutedEventArgs e) { NamespaceFromReferencedUnsafeDll.SomeFunction(out somePtr) } ... }compila sin errores y funciona en tiempo de ejecución.