From: William S F. <ws...@fu...> - 2005-11-20 21:42:55
|
Eric Sanford wrote: > Hi all > I'm Having problems with how I typemap unsigned long to Int64. It does > not seem to convert correctly for a value of 12 in c++ i get > 587409482934386700 in c#. We want to use Int64 because UInt64,32 and > all are not CLS-compliant. > > the function I'm calling: > static size_t getTypeSize(VertexElementType etype); > > here is the typemap: > %typemap(ctype) unsigned long, ulong, size_t "unsigned long"; > %typemap(imtype) unsigned long, ulong, size_t "Int64"; > %typemap(cstype) unsigned long, ulong, size_t "Int64"; > %typemap(csin) unsigned long, ulong, size_t "$csinput"; > %typemap(csout) unsigned long, ulong, size_t > { > return (Int64)($imcall); > } > %typemap(csvarout) unsigned long, ulong, size_t > %{ > get > { > return (Int64)($imcall); > } > %} > You are marshalling a 32 bit unsigned number (unsigned long in the ctype typemap) on the unmanaged side to a 64 bit signed number on the managed side (Int64 in the imtype typemap). If you match this up correctly it will work, eg change the ctype typemap to use 'long long' or '__int64'. What do you mean by UInt64 etc are not CLS compliant? They are defined in the ISO C# spec. William |