C++ cli 将对象转换为C++;内置式

C++ cli 将对象转换为C++;内置式,c++-cli,type-conversion,integer-overflow,C++ Cli,Type Conversion,Integer Overflow,我有以下最低限度的代码: using namespace System; long get_prop( Object^ v ) { return Convert::ToInt32( v ); } int main() { Object^ o1 = gcnew Int32( -1 ); Object^ o2 = gcnew UInt32( 0xFFFFFFFF ); long value1 = get_prop( o1 ); long value2 =

我有以下最低限度的代码:

using namespace System;

long get_prop( Object^ v )
{
    return Convert::ToInt32( v );
}

int main()
{
    Object^ o1 = gcnew Int32( -1 );
    Object^ o2 = gcnew UInt32( 0xFFFFFFFF );
    long value1 = get_prop( o1 );
    long value2 = get_prop( o2 );

    return 0;
}

它在
get_prop
函数中给出
OverflowException
异常。最后,我需要使用纯C++代码中的<代码> GET-Posip的结果。编写
get_prop
函数的正确方法是什么,以便在这两种情况下都能正常工作。我能用C++中的一些模板吗?还是有更多的琐碎的解决方案?< /P> < P > Hmya,你正在尝试用31位的Pokes填充32位的猪。此代码最终调用Convert::ToInt32(UInt32值),如下所示:

public static int ToInt32(uint value)
{
    if (value > 0x7fffffff)
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return (int) value;
}
卡布姆。不确定您想要哪种类型的溢出行为,但这允许编译器进行忽略并避免异常:

long get_prop( Object^ v )
{
    return (long)Convert::ToInt64( v );
}

嗯,你想把一头32位的猪塞进31位的戳里。此代码最终调用Convert::ToInt32(UInt32值),如下所示:

public static int ToInt32(uint value)
{
    if (value > 0x7fffffff)
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return (int) value;
}
卡布姆。不确定您想要哪种类型的溢出行为,但这允许编译器进行忽略并避免异常:

long get_prop( Object^ v )
{
    return (long)Convert::ToInt64( v );
}

Convert::ToInt64
会在x64系统上导致我所理解的相同问题吗?至于溢出行为,我需要保持原始值的位模式。不,在MS编译器和Windows上,long仍然是32位。UInt32也不会改变。是否有类似于
static\u cast
的东西可以在不生成异常的情况下处理溢出
(长)Convert::ToInt64看起来仍然不安全。这里的静态转换和C转换没有区别。通过在64位模式下实际运行,克服您的恐惧。这篇文章将在6秒钟内自毁,显然没有帮助。谢谢你的回答。与C++ C++相比,我不太接近C++和CLI。这方面的愚蠢问题。
Convert::ToInt64
会在x64系统上导致我所理解的相同问题吗?至于溢出行为,我需要保持原始值的位模式。不,在MS编译器和Windows上,long仍然是32位。UInt32也不会改变。是否有类似于
static\u cast
的东西可以在不生成异常的情况下处理溢出
(长)Convert::ToInt64看起来仍然不安全。这里的静态转换和C转换没有区别。通过在64位模式下实际运行,克服您的恐惧。这篇文章将在6秒钟内自毁,显然没有帮助。谢谢你的回答。与C++ C++相比,我不太接近C++和CLI。从那引出的愚蠢问题。