什么.NET类型封送到COM单元? < >我在声明一个接口,它将暴露在COM中供C++使用。我们的规范规定一个整数参数应该是[in]UINT uiVal。我在C#中使用了int,它被公开为long

什么.NET类型封送到COM单元? < >我在声明一个接口,它将暴露在COM中供C++使用。我们的规范规定一个整数参数应该是[in]UINT uiVal。我在C#中使用了int,它被公开为long,com,com-interop,idl,Com,Com Interop,Idl,这没什么大不了的,但是我怎样才能迫使马歇尔使用UINT而不是long?某个特定的.Net类型,或者我是否需要以某种方式向C参数添加属性?UINT是Windows SDK中的类型别名,您永远无法从类型库中获取它。翻译类型库的工具,如您正在使用的#import指令,选择本机C类型。历史起了作用,COM最初是为16位版本的Windows设计的。当long对于声明32位整数很重要时 声明中的代码> u> ,它将被转换为C++代码中的未签名的长< /代码>。这很好,它仍然是32位类型,微软选择了64位代码

这没什么大不了的,但是我怎样才能迫使马歇尔使用
UINT
而不是
long
?某个特定的.Net类型,或者我是否需要以某种方式向C参数添加属性?

UINT是Windows SDK中的类型别名,您永远无法从类型库中获取它。翻译类型库的工具,如您正在使用的#import指令,选择本机C类型。历史起了作用,COM最初是为16位版本的Windows设计的。当long对于声明32位整数很重要时

声明中的代码> u> <代码>,它将被转换为C++代码中的<代码>未签名的长< /代码>。这很好,它仍然是32位类型,微软选择了64位代码。他们没有太多的选择。与*nix中选择的LP64型号不同。他们也没有太多选择,Y2K38灾难正在快速逼近:)