Solución:
Intenta cambiar [In]
para [In, Out]
. Tampoco estoy seguro de usar tanto el ref
y [In, Out]
palabras clave juntas en un solo argumento. (Editar: Hans Passant tiene una buena explicación de las diferencias entre los dos en su comentario a continuación).
Consulte este artículo de MSDN para obtener más información, especialmente el pasaje, “De forma predeterminada, los tipos de referencia (clases, matrices, cadenas e interfaces) pasados por valor se calculan como parámetros In por motivos de rendimiento. No verá cambios en estos tipos a menos que aplique InAttribute y OutAttribute (o simplemente OutAttribute) al parámetro del método “.
Comencé a recibir esta excepción durante la interoperabilidad nativa periódicamente después de actualizar a Windows 7. El código siempre había funcionado en XP y tiene menos problemas en Win 7 si ejecuté mi aplicación en modo de compatibilidad con XP.
Después de investigar un poco y experimentar, descubrí que la razón por la que recibía esta excepción tenía que ver con llamar a una función nativa que devolvía una cadena (WCHAR *).
No creo que actualmente haya una solución para esto, ya que incluso la actualización a .Net 3.5 no solucionó el problema … Sin embargo, encontré la siguiente solución.
Ejemplo de lo que funciona en XP pero no en Win 7:
[DllImport("NativeBin.dll")]
public static extern String GetWCharStr();
Ejemplo de lo que me funciona en Win 7 y XP:
[DllImport("NativeBin.dll")]
private static extern IntPtr GetWCharStr();
public static String GetString()
{
return Marshal.PtrToStringUni(GetWCharStr());
}