Marshal styrt struct å forvaltet kode ved hjelp av C #

stemmer
1

Jeg trenger å behandle byte [] når jeg får fra eksternt program. Den eksterne applikasjonen er også gjort i C # og de sender byte gjennom UDP. De sender byte konvertert fra struct som er angitt nedenfor:

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

Så, når jeg får bytes, jeg trenger å ta ut char [] i det, og få strengen ut av at char [].

Jeg er ny i denne typen uovervåkede koding.

Publisert på 18/06/2009 klokken 14:39
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Sannsynligvis bør du erklære det som ByValTStr(avhengig av innholdet av strengen, kan det være annerledes):

 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 public struct DISPATCH_MESSAGE{ 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]   
    public string federation_name; 
 }

OPPDATERING: Hvis det er allerede gir ut et char[], det er nok å gjøre de nødvendige konverteringen (inkluderer håndtering koding) riktig, så jeg tror du bare trenger:

string str = new string(instance.federation_name);
Svarte 18/06/2009 kl. 14:45
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more