Pass a struct* parameter from c# to a native c++ dll
See the question and my original answer on StackOverflowIn C#, long
is a keyword for .NET's System.Int64, which represents a 64-bit signed integer.
In C++, long's size can vary but it's often a 32-bit signed integer (check your compiler).
So if your C++ long
's size is indeed 32-bit, you must use C#'s int
(or .NET System.Int32
) otherwise you'll get an offset mismatch in the structure and anything can and will happen.
PS: .NET Marshal.SizeOf
, Marshal.OffsetOff
and C++ sizeof
, offsetof
can be used also to compare overall structures offsets and sizes.