2011-06-27 2 views
0

J'essaye de construire une structure en C# pour passer au C++ non managé, je me demandais quel est le type correct de variable à utiliser pour un tableau unichar dans ma structure et ce qu'il devrait être rassemblé comme.Comment utiliser unichar array en C# struct avec DLLImport de non managé C

Je l'ai déjà compris cela pour un unsigned char array

C/C++

typedef struct _foo { 
    void *fileId; 
    unsigned char fileName[15]; 
} foo; 

C#

[StructLayout(LayoutKind.Sequential)] 
public struct foo 
{ 
    public IntPtr fileId; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] 
    public string fileName; 
} 

Donc, si je donne les résultats suivants en C++

typedef struct _foo { 
    void *fileId; 
    unichar fileName[15]; // UTF-16LE 
} foo; 

Quelle serait la structure correcte à utiliser en C#?

Répondre

0

préciser la structure en tant que structure unicode:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct foo 
{ 
    public IntPtr fileId; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] 
    public string fileName; 
} 
0

Je devine la même struct ferait, mais vous devez définir la propriété DllImportAttribute.CharSet-Auto ou il sera par défaut Ansi. Unicode le ferait aussi, mais à moins que vous n'utilisiez Windows 98 ou Me (aucun commentaire) Auto va marshaler les chaînes comme Unicode.

Questions connexes