0

最近我将我的 SourcePro 升级到 2021 版本,在 RCB 设置期间,当它提示我选择 C++ 方言时,我选择了唯一可用的选项,即 C++14。设置后,我开始编译 Tuxedo 代码,目前在多个文件中遇到以下错误,说我的 Tuxedo 项目中有大约 200-250 个文件,下面是我的 Solaris OS 和编译器的详细信息。

unname -a:

SunOS nzdrb12z 5.11 11.4.40.107.3 sun4v sparc sun4v 非全局区域

抄送-V:

cc: Studio 12.6 Sun C 5.15 SunOS_sparc 2017/05/30

此处不允许将值设置为“short”。“/app/sdasup/home/mhp/source/develop/bc/include/bcMwServicesGuid.h”,第 36 行:错误:此处不允许将“int”值缩小为“short”。“/app/sdasup/home/mhp/source/develop/bc/include/bcMwServicesGuid.h”,第 41 行:错误:此处不允许将“int”值缩小为“short”。“/app/sdasup/home/mhp/source/develop/bc/include/bcMwServicesGuid.h”,第 45 行:错误:此处不允许将“int”值缩小为“short”。

假设我选择第一个错误信息文件打开 bcIControlBlock.h 并且第 34 行指向以下代码,

DEFINE_GUID(IID_IAbcIControlBlock, 0xc7645022, 0x93e9, 0x11d1, 0x9d, 0x90, 0x0, 0x0, 0xf6, 0x4e, 0x16, 0x6a);

当搜索宏时,它具有以下定义,

#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
        EXTERN_C const GUID name \
                        = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 }  }

作为一种解决方法,我厌倦了以下解决方法,

DEFINE_GUID(IID_IAbcIControlBlock, 0xc7645022, (short)0x93e9, 0x11d1, 0x9d, 0x90, 0x0, 0x0, 0xf6, 0x4e, 0x16, 0x6a);

尽管效果很好,但我对解决问题所采用的方法非常怀疑。然而,更改多个文件似乎很痛苦。

问题:

  1. 变通解决方案是否正确?
  2. 如果是这样,那么如何使在一个地方更改它而不是多个文件更通用?
  3. 如果不是,最好的解决方法是什么,以免进一步破坏?

提前致谢。

4

1 回答 1

0

理想情况下,所有GUID字段都应声明为无符号(参见例如此 Microsoft 文档)。但是某些语言(例如 Java)不支持无符号整数。所以看起来你的 C++GUID结构是由 Java 程序员定义的。

如果您可以更改 的定义GUID,请执行此操作。如果没有,恐怕您将不得不将您的(short)演员应用于所有出现的DEFINE_GUID宏(除非您的编译器有某种方法可以禁用此错误,如您原始帖子的评论中所建议的那样)。Java 程序员必须一直这样做。

于 2022-03-02T13:42:04.700 回答