什么.NET类型编组到COM UINT?

时间:2015-10-08 13:43:14

标签: com com-interop idl

在C#中,我声明了一个接口,它将暴露给COM以供C ++使用。我们的规范说一个整数参数应该是[in]UINT uiVal。我在C#中使用int,它被公开为long

这不是什么大不了的事,但是我怎样才能强迫它去UINT而不是long?一些特定的.Net类型,还是我需要以某种方式向C#参数添加属性?

1 个答案:

答案 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灾难即将来临:)