C#を使用したアンマネージ構造体のマネージコードへのマーシャリング

StackOverflow https://stackoverflow.com/questions/1013024

質問

外部アプリケーションから取得した場合、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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top