Estructura no administrada de Marshal para código administrado usando C #
-
06-07-2019 - |
Pregunta
Necesito procesar los bytes [] cuando obtengo una aplicación externa. La aplicación externa también se realiza en C # y envían los bytes a través de UDP. Están enviando los bytes convertidos de la estructura que se indica a continuación:
public struct DISPATCH_MESSAGE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] federation_name; // Units: nil Range: nil
}
Entonces, cuando obtengo los bytes, necesito sacar el char [] dentro de eso, y sacar la cadena de ese char [].
Soy nuevo en este tipo de codificación no administrada.
Solución
Probablemente debería declararlo como ByValTStr
(dependiendo de la naturaleza de la cadena, puede ser diferente):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPATCH_MESSAGE{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string federation_name;
}
ACTUALIZACIÓN: si ya está dando un char []
, probablemente esté haciendo la conversión necesaria (incluye el manejo de la codificación) correctamente, así que creo que solo necesitaría :
string str = new string(instance.federation_name);