Структура не проблема, она будет правильно распределена как есть.
[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. Как это закодировано, не понятно из вашего вопроса.