2
在C#中我声明了一个接口,它将暴露给COM供C++使用。我们的规范说一个整数参数应该是[in]UINT uiVal
。我在C#中使用了int
,它被暴露为long
。什么.NET类型编组到COM UINT?
这不是什么大不了的事,但我怎么能强制马歇尔UINT
而非long
?某些特定的.Net类型,还是我需要以某种方式向C#参数添加属性?
在C#中我声明了一个接口,它将暴露给COM供C++使用。我们的规范说一个整数参数应该是[in]UINT uiVal
。我在C#中使用了int
,它被暴露为long
。什么.NET类型编组到COM UINT?
这不是什么大不了的事,但我怎么能强制马歇尔UINT
而非long
?某些特定的.Net类型,还是我需要以某种方式向C#参数添加属性?
UINT是来自Windows SDK的类型别名,您永远不会从类型库中获取它。翻译类型库的工具,如您正在使用的#import指令,选择本地C类型。历史扮演着角色,COM最初是为16位版本的Windows设计的。当长对声明一个32位整数很重要。
C#声明中最接近的是uint
,它将在您的C++代码中被转换为unsigned long
。这很好,它仍然是一个32位的类型,微软选择了LLP64 data model作为64位代码。他们没有太多的选择。与在* nix中选择的LP64模型不同。他们没有太多的选择,Y2K38灾难即将来临:)