2014-09-08 1 views
1

В библиотеке классов C++/CLI У меня есть следующие функции:Система: Uint32^в C++/CLI компилируется в VaueType в C#?

static System::UInt32^ Fn() 
{ 
    return gcnew System::UInt32(0); 
} 

Когда я использую библиотеку классов в C# Система :: UInt32 является система :: ValueType и ошибка компилятора:

Error 1 Cannot implicitly convert type 'System.ValueType' to 'uint'. An explicit conversion exists (are you missing a cast?)

Почему это происходит, когда я отказываюсь от System :: UInt32 в C++/CLI? Я получаю ValueType в C#?

Благодаря

+1

Не могли бы вы показать, как вы используете эту функцию в C#? –

+2

'System :: UInt32' не является ссылочным типом, поэтому я бы выбрал'^'и' gcnew'. – crashmstr

+1

C# не поддерживает строго типизированные значения в коробке, он отображает их все как 'ValueType'. –

ответ

3

UInt32 является типом значения (struct в C#), а не тип ссылки. Поэтому для него не нужен дескриптор ^.

Переключите этот метод на следующий, и он появится обычно на C#.

static System::UInt32 Fn() 
{ 
    return 0; 
} 

Если преобразовать остальной код, чтобы удалить ^ из типов значений, вы обнаружите, что ваш C++/CLI код выглядит более естественно, и вы будете иметь меньше проблем взаимодействия с .Net Библиотека.

Смежные вопросы