Clang 将类型库文件迁移到C++;建筑商里约10.3.1

Clang 将类型库文件迁移到C++;建筑商里约10.3.1,clang,c++builder,c++builder-10.3-rio,Clang,C++builder,C++builder 10.3 Rio,我正在使用C++Builder 10.3 Rio Update 1。将某些类型库文件迁移到clang C++17 32位编译器时遇到问题。我有一个使用经典编译器(C++98)创建的应用程序,它使用类型库。几年前我导入了类型库并创建了三个文件\u OCX.dcr,\u TLB.cpp,\u TLB.h 当我尝试在clang C++17编译器中编译此应用程序时,出现以下错误: [bcc32c错误]ddfpbridge_TLB.h(304):枚举数值的计算结果为2147549182,不能缩小为“int

我正在使用C++Builder 10.3 Rio Update 1。将某些类型库文件迁移到clang C++17 32位编译器时遇到问题。我有一个使用经典编译器(C++98)创建的应用程序,它使用类型库。几年前我导入了类型库并创建了三个文件
\u OCX.dcr
\u TLB.cpp
\u TLB.h

当我尝试在clang C++17编译器中编译此应用程序时,出现以下错误:

[bcc32c错误]ddfpbridge_TLB.h(304):枚举数值的计算结果为2147549182,不能缩小为“int”类型

下面括号内的四行中的每一行都给出了相同的错误。你能建议修改代码以使其编译吗

// ***************************************************//
// Declaration of Enumerations defined in Type Library                    
// ***************************************************//

enum class HRESULTS
{
 HRESULTS_E_SERVERISNULLOREMPTY = 0x8000FFFE, 
 HRESULTS_E_USERNAMEISNULLOREMPTY = 0x8000FFFD, 
 HRESULTS_E_PASSWORDISNULLOREMPTY = 0x8000FFFC, 
 HRESULTS_E_SYMBOLISNULLOREMPTY = 0x8000FFFB 
};
我已尝试在当前版本的C++Builder中重新导入类型库并重新创建这些文件,但导入向导显示错误消息:

访问OLE注册表时出错


ddfpbridge_TLB.h
中的第304行实际上是什么样子的?我怀疑错误不在枚举值本身的声明上,而是在别处使用枚举值的地方。第304行是括号内的第一行:HRESULT_E_SERVERISNULLOREMPTY=0x8000FFFE,
0x8000FFFE
超出了
int
的上限范围(
0x7FFFFFFF
)。与经典的Borland编译器相比,Clang对这类事情的要求更为严格。您必须使用十六进制值的负十进制等价物,例如:
HRESULTS\u E\u服务器isnullorempty=-2147418114
HRESULTS\u E\u用户名isnullorempty=-2147418115
HRESULTS\u E\u密码isnullorempty=-2147418116
HRESULTS\u E\u符号rempty=-2147418117
,或者将枚举的基础类型指定为
无符号int
而不是
int
,例如:
枚举类HRESULT:std::uint32{…}