2015-10-08 3 views
2

В C# я объявляю интерфейс, который будет открыт COM для использования на C++. Наша спецификация говорит, что один целочисленный параметр должен быть [in]UINT uiVal. Я использую int в C#, и он отображается как long.Что такое тип .NET для COM UINT?

Это неважно, но как я могу заставить его маршаллировать до UINT, а не long? Какой-то конкретный .Net-тип, или мне нужно каким-то образом добавить атрибуты к параметру C#?

ответ

3

UINT - это псевдоним типа из SDK Windows, вы никогда не получите его из библиотеки типов. Инструмент, который переводит библиотеки типов, например, директива #import, которую вы используете, выбирает собственные типы C. История играет роль, COM был первоначально разработан для 16-разрядной версии Windows. Когда long было важно объявить 32-разрядное целое число.

Ближе всего вы можете получить uint в декларации C#, оно будет переведено на unsigned long в ваш код на C++. Что хорошо, он все еще 32-разрядный, Microsoft выбрала LLP64 data model для 64-битного кода. У них не было выбора. В отличие от модели LP64, выбранной в * nix. У них тоже не было выбора, катастрофа Y2K38 быстро приближается :)

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