[Mono-dev] Marshaling DateTime type
Robert Jordan
robertj at gmx.net
Wed Oct 15 12:14:48 EDT 2008
Hi,
Raja R Harinath wrote:
> Hi,
>
> Robert Jordan <robertj at gmx.net> writes:
>> Raja R Harinath wrote:
>>> Robert Jordan <robertj at gmx.net> writes:
>>>> FirstName LastName wrote:
>>>>> What would be the best equivalent unmanaged type (linux and windows)
>>>>> to use if I want to marshal a DateTime in the managed world (.NET,
>>>>> mono)?
>>>> You can't marshal DateTime directly because its internal representation
>>>> is different between runtimes *and* profiles. Use DateTime.Tick (an
>>>> int64) or a similar era-based representation.
>>> But, IIRC, strangely enough, arrays of DateTimes should serialize fine.
>>> So, you might be better of using a one-element DateTime array.
>> Look at DateTime's layout:
>>
>> public struct DateTime
>> {
>> private TimeSpan ticks;
>> #if NET_2_0
>> DateTimeKind kind;
>> #endif
>> }
>>
>> Nasty things would happen if the unmanaged code is profile agnostic.
>
>>From a quick examination of the source code in SVN trunk, my
> understanding is that both the Binary and Soap serializers have special
> cases for DateTime, which aren't dependent on the exact layout -- and
> the serialization is profile-dependent.
Yes. Unfortunately, the special DateTime serialization is not used
in all cases (see the bug below).
Anyway, serialization doesn't apply to p/invoke. If I understood
correctly, the original poster was asking about managed/unmanaged
marshaling.
>
> (Of course, since I haven't actually tried it out, I can't guarantee
> that it's fully interoperable with .NET.)
Here is the full story of DateTime serialization issues:
https://bugzilla.novell.com/show_bug.cgi?id=325067
Robert
More information about the Mono-devel-list
mailing list