c#pinvoke marshal struct

时间:2010-04-30 18:03:44

标签: c# struct pinvoke

我有一个非管理的结构,我想整理到c#看起来基本上是这样的:

struct DateTimeStruct{
   double datetimestamp;
};   

struct MyStruct{
   char firstname[40];
   char lastname[40];
   DateTimeStruct bday;
   unsigned integer bool1;
   int val1;
};

正确的c#声明是什么?

1 个答案:

答案 0 :(得分:1)

结构不是问题,它会按原样正确编组。

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    struct MyStruct{
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40]
        string firstname;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40]
        string lastname;
        DateTimeStruct bday;
        uint bool1;
        int val1;
    }

当然,您可以将double转换为匹配的DateTime值。如何编码是不可能的问题。