将ac char数组[128]封送至C#

Pae*_*ula 5 c# dll interop struct marshalling

这个问题很简单,但是我找不到一个直接的答案:我想在我的C结构中有一个128字节的char数组。我正在64位Windows下运行此程序。我想使用以下命令将其封送给C#:

C代码:

typedef struct s_parameterStuct
{
    int count;
    char name[ 128 ];
} parameterStruct;
Run Code Online (Sandbox Code Playgroud)

和C#代码:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class parameterStuct
{
    public int count;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
    public char[] name;
}
Run Code Online (Sandbox Code Playgroud)

由于在c#中char是2个字节,因此SizeConst应该是128还是256。两者似乎都可以正常工作,但是我知道其中只有一个是正确的。

Wug*_*Wug 2

大小将为 64,因为 64 个 2 字节数量与 128 个 1 字节数量具有相同的大小。

我会使用字节数组进行封送,否则您将不得不忍受拆分值才能获取 C 字符(它们是单字节)。