系统:Uint32^in C++/CLI编译为C#中的VaueType?

系统:Uint32^in C++/CLI编译为C#中的VaueType?,c#,c++-cli,managed,C#,C++ Cli,Managed,在C++/CLI类库中,我具有以下功能: static System::UInt32^ Fn() { return gcnew System::UInt32(0); } 在C#中使用类库时,System::Uint32是System::ValueType,编译器错误: 错误1无法将类型“System.ValueType”隐式转换为“uint”。 存在显式转换(是否缺少强制转换?) 为什么当我在C++/CLI中定义System::UInt32时,我在C#中得到一个ValueType 谢谢

在C++/CLI类库中,我具有以下功能:

static System::UInt32^ Fn()
{
    return gcnew System::UInt32(0);
}
在C#中使用类库时,System::Uint32是System::ValueType,编译器错误:

错误1无法将类型“System.ValueType”隐式转换为“uint”。 存在显式转换(是否缺少强制转换?)

为什么当我在C++/CLI中定义System::UInt32时,我在C#中得到一个ValueType


谢谢

UInt32
是一种值类型(
struct
在C#)中,而不是引用类型。因此,它不需要
^
句柄

将该方法切换到以下方法,它将正常显示在C#中


如果您将其余代码转换为从值类型中删除
^
,您会发现您的C++/CLI代码看起来更自然,并且与.Net库接口的问题也会更少。

您可以演示如何在C#中使用函数吗?
System::UInt32
不是引用类型,因此,我会抛弃
^
gcnew
.C#不支持强类型的装箱值,它将它们全部显示为
ValueType
。我很惊讶它没有显示为
对象
,这是装箱类型C#唯一支持的。从
对象
取消装箱很容易,但是如何从
值类型
取消装箱呢?
static System::UInt32 Fn()
{
    return 0;
}