【问题标题】:What .NET type marshalls to COM UINT?什么 .NET 类型编组到 COM UINT?
【发布时间】:2016-01-06 04:23:08
【问题描述】:

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

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

【问题讨论】:

    标签: com com-interop idl


    【解决方案1】:

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

    在 C# 声明中,您可以获得的最接近的是 uint,它将在您的 C++ 代码中转换为 unsigned long。没关系,它仍然是 32 位类型,微软为 64 位代码选择了LLP64 data model。他们没有太多选择。与 *nix 中选择的 LP64 模型不同。他们也别无选择,Y2K38 灾难正在迅速逼近 :)

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2014-12-17
      • 2017-03-16
      • 2011-05-05
      • 2010-10-21
      • 2013-02-10
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多