2009-06-18 8 views
1

Je dois traiter les octets [] quand je reçois de l'application externe. L'application externe est également faite dans C# et ils envoient les octets à travers UDP. Ils envoient les octets convertis à partir struct mentionnée ci-dessous:Maréchal struct non managé au code managé en utilisant C#


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

Alors, quand je reçois les octets, je dois prendre le char [] à l'intérieur qui, et obtenir le chaîne de ce caractère [].

J'espère que mon explication est claire. Je suis nouveau à ce genre de codage non géré. Aidez-moi s'il vous plaît à ce sujet. C'est urgent. Merci.

+0

Lisez-vous les octets bruts d'une connexion UDP? –

Répondre

2

Probablement vous annonciez comme ByValTStr (selon la nature de la chaîne, il peut être différent):

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

MISE À JOUR: S'il est déjà donner un char[], il est probablement fait le nécessaire conversion (inclut le codage de manipulation) correctement, donc je pense que vous auriez juste besoin:

string str = new string(instance.federation_name); 
+0

Je n'ai pas l'accès à l'application externe. Tout ce que je dois faire, shud être dans mon application. merci. – Anuya

+0

salut, comment puis-je obtenir l'instance dans chaîne str = nouvelle chaîne (instance.federation_name); ??? Merci. Je suis un nouveau bie à cela. – Anuya

+0

Il y a probablement une fonction qui retourne (ou prend) une telle instance ... N'est-ce pas? Si non, à quoi ça sert d'utiliser cette structure? –

Questions connexes