在C#中,我声明了一个接口,它将暴露给COM以供C ++使用。我们的规范说一个整数参数应该是[in]UINT uiVal
。我在C#中使用int
,它被公开为long
。
这不是什么大不了的事,但是我怎样才能强迫它去UINT
而不是long
?一些特定的.Net类型,还是我需要以某种方式向C#参数添加属性?
答案 0 :(得分:3)
UINT是Windows SDK中的类型别名,您永远不会从类型库中获取它。翻译类型库的工具(如您正在使用的#import指令)选择本机C类型。历史起着重要作用,COM最初是为16位版本的Windows设计的。 long 对于声明32位整数非常重要。
在C#声明中,最接近的是uint
,它将在您的C ++代码中被翻译为unsigned long
。哪个好,它仍然是32位类型,Microsoft为64位代码选择了LLP64 data model。他们没有多少选择。与* nix中选择的LP64模型不同。他们也没有多少选择,Y2K38灾难即将来临:)