【发布时间】:2014-06-27 08:41:04
【问题描述】:
我的方案是将我的项目从 XE3 移植到 XE6。
当我将调用约定从 C 切换到 stdcall 时,我遇到了这些未解决的外部变量。
从那里开始,UnicodeString()、~UnicodeString()(任何其他)变得无法解析。
我会比较 XE3 和 XE6 之间的 ustring.h。看起来那里有很多变化。
例如:UnicodeString 析构函数。
在 XE3 中,它被标记为:
__fastcall ~UnicodeString();
在 XE6 中,它被标记为:
~UnicodeString();
我将声明修改为:
__cdecl ~UnicodeString();
这更正了链接器错误。
这是正常的吗,是正确的纠正吗?
获取问题:
- 创建一个新的 C++ 包;
- 创建一个从 TEdit 派生的新组件,并将其添加到 包。
- 构建和链接 => 一切正常;
- 然后转到项目选项,并将调用约定切换到 stdcall;
- 构建和链接 => 出现未解决的外部问题;
提前感谢您的回答。
N。福丁
【问题讨论】:
-
我建议您将此作为回归错误提交给QualityCentral。由于兼容性类(如
UnicodeString)是在预编译的 RTL 中实现的,因此标头需要与使用的实际调用约定相匹配,否则您会得到这些链接器错误,而不是 C++ 编译器想要使用的错误。早期版本强制这种平等,看起来有人在 XE6 中搞砸了它 -
嗯,我就是这么想的!感谢 QC 日志 Remy。你还是那个!!我正在评估产品,我正在与 Embarcadero 的卖家和工程师保持联系。我会向他们推荐新的 QC。
标签: linker unicode-string ansistring c++builder-xe6