Maresciallo Unmanaged struct al codice gestito usando C #
-
06-07-2019 - |
Domanda
Devo elaborare i byte [] quando ottengo da un'applicazione esterna. L'applicazione esterna viene eseguita anche in C # e inviano i byte tramite UDP. Stanno inviando i byte convertiti da struct che è indicato di seguito:
public struct DISPATCH_MESSAGE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] federation_name; // Units: nil Range: nil
}
Quindi, quando ottengo i byte, devo eliminare il carattere [] al suo interno, e togli la stringa da quel carattere [].
Sono nuovo di questo tipo di codifica non gestita.
Soluzione
Probabilmente dovresti dichiararlo come ByValTStr
(a seconda della natura della stringa, potrebbe essere diverso):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPATCH_MESSAGE{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string federation_name;
}
AGGIORNAMENTO: Se sta già distribuendo un char []
, probabilmente sta eseguendo correttamente la conversione necessaria (inclusa la gestione della codifica), quindi penso che avresti solo bisogno :
string str = new string(instance.federation_name);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow