Маршал Неуправляемая структура в управляемый код с использованием C # - PullRequest
1 голос
/ 18 июня 2009

Мне нужно обрабатывать байты [], когда я получаю из внешнего приложения. Внешнее приложение также выполняется на C #, и они отправляют байты через UDP. Они отправляют байты, преобразованные из структуры, которая указана ниже:

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

Итак, когда я получаю байты, мне нужно вынуть символ [] внутри него, и получить строку из этого символа [].

Я новичок в этом виде неуправляемого кодирования.

1 Ответ

2 голосов
/ 18 июня 2009

Возможно, вы должны объявить его как 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);
...