如何在C#struct中使用unichar数组和非托管C的DLLImport
我试图在C语言中构造一个结构,把它传递给非托管C++,我想知道在我的结构中,对于<代码> UNICAR < /Cord>数组使用的变量是什么类型,它应该被编组为.< /P> 对于如何在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中有以下内容++
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;
}