Marshal非托管结构使用C#进行托管代码

时间:2009-06-18 14:39:21

标签: c# .net struct unmanaged marshalling

当我从外部应用程序获取时,我需要处理bytes []。外部应用程序也在C#中完成,它们通过UDP发送字节。它们发送从struct转换的字节,如下所述:

public struct DISPATCH_MESSAGE
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    public char[] federation_name; // Units: nil     Range: nil
}

所以,当我得到字节时,我需要取出里面的char [], 并从char []中获取字符串。

我是这种非托管编码的新手。

1 个答案:

答案 0 :(得分:2)

可能你应该将它声明为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);