Clang 将类型库文件迁移到C++;建筑商里约10.3.1
我正在使用C++Builder 10.3 Rio Update 1。将某些类型库文件迁移到clang C++17 32位编译器时遇到问题。我有一个使用经典编译器(C++98)创建的应用程序,它使用类型库。几年前我导入了类型库并创建了三个文件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
\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{…}