Хмя, вы пытаетесь засунуть 32-битную свинью в 31-битный удар.Этот код в конечном итоге вызывает Convert :: ToInt32 (значение UInt32), который выглядит следующим образом:
public static int ToInt32(uint value)
{
if (value > 0x7fffffff)
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
return (int) value;
}
Kaboom.Не уверен, какое поведение при переполнении вы хотите, но это позволяет компилятору игнорировать и избегать исключения:
long get_prop( Object^ v )
{
return (long)Convert::ToInt64( v );
}