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。两者似乎都可以正常工作,但是我知道其中只有一个是正确的。
大小将为 64,因为 64 个 2 字节数量与 128 个 1 字节数量具有相同的大小。
我会使用字节数组进行封送,否则您将不得不忍受拆分值才能获取 C 字符(它们是单字节)。