如何在C#struct中使用unichar数组和非托管C的DLLImport

如何在C#struct中使用unichar数组和非托管C的DLLImport,c#,struct,dllimport,unichar,C#,Struct,Dllimport,Unichar,我试图在C语言中构造一个结构,把它传递给非托管C++,我想知道在我的结构中,对于 UNICAR < /Cord>数组使用的变量是什么类型,它应该被编组为.< /P> 对于无符号字符数组 信用证++ C# 因此,如果我在C中有以下内容++ typedef struct _foo { void *fileId; unichar fileName[15]; // UTF-16LE } foo; 在C#中使用的正确结构是什么?我猜同样的结构也可以,但是您需要将dlliportAt

我试图在C语言中构造一个结构,把它传递给非托管C++,我想知道在我的结构中,对于<代码> UNICAR < /Cord>数组使用的变量是什么类型,它应该被编组为.< /P> 对于
无符号字符数组

信用证++

C#

因此,如果我在C中有以下内容++

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

在C#中使用的正确结构是什么?

我猜同样的
结构也可以,但是您需要将
dlliportAttribute.CharSet
属性设置为
Auto
,否则它将默认为
Ansi
Unicode也可以,但除非您使用Windows 98或Me(无注释)
Auto
将字符串封送为Unicode。

将结构指定为Unicode结构:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct foo
{
   public IntPtr fileId;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
   public string fileName;
}
typedef struct _foo {
    void *fileId;
    unichar fileName[15];   //  UTF-16LE
} foo;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct foo
{
   public IntPtr fileId;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
   public string fileName;
}