2015-10-08 56 views
2

在C#中我声明了一个接口,它将暴露给COM供C++使用。我们的规范说一个整数参数应该是[in]UINT uiVal。我在C#中使用了int,它被暴露为long什么.NET类型编组到COM UINT?

这不是什么大不了的事,但我怎么能强制马歇尔UINT而非long?某些特定的.Net类型,还是我需要以某种方式向C#参数添加属性?

回答

3

UINT是来自Windows SDK的类型别名,您永远不会从类型库中获取它。翻译类型库的工具,如您正在使用的#import指令,选择本地C类型。历史扮演着角色,COM最初是为16位版本的Windows设计的。当对声明一个32位整数很重要。

C#声明中最接近的是uint,它将在您的C++代码中被转换为unsigned long。这很好,它仍然是一个32位的类型,微软选择了LLP64 data model作为64位代码。他们没有太多的选择。与在* nix中选择的LP64模型不同。他们没有太多的选择,Y2K38灾难即将来临:)