C#を使用したアンマネージ構造体のマネージコードへのマーシャリング
-
06-07-2019 - |
質問
外部アプリケーションから取得した場合、bytes []を処理する必要があります。外部アプリケーションもC#で実行され、UDPを介してバイトを送信します。彼らは、以下に記載されている構造体から変換されたバイトを送信しています:
public struct DISPATCH_MESSAGE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] federation_name; // Units: nil Range: nil
}
したがって、バイトを取得したら、その中のchar []を取り出す必要があります。 そのchar []から文字列を取得します。
この種のアンマネージコーディングは初めてです。
解決
おそらく ByValTStr
として宣言する必要があります(文字列の性質によって異なります):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPATCH_MESSAGE{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string federation_name;
}
更新:既に char []
を提供している場合、おそらく必要な変換(エンコードの処理を含む)を正しく実行しているので、必要なだけだと思います:
string str = new string(instance.federation_name);
所属していません StackOverflow