XE6 Ansi/Unicode 字符串链接器错误(未解决的外部问题)
Posted
技术标签:
【中文标题】XE6 Ansi/Unicode 字符串链接器错误(未解决的外部问题)【英文标题】:XE6 Ansi/Unicode-String Linker Errors (Unresolved Externals) 【发布时间】: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 中搞砸了它
我已为您提交了质控报告:#124667 Unresolved External error in UnicodeString destructor。
嗯,我就是这么想的!感谢 QC 日志 Remy。你还是那个!!我正在评估产品,我正在与 Embarcadero 的卖家和工程师保持联系。我会向他们推荐新的 QC。
【参考方案1】:
您是否碰巧在 XE6 上使用 32 位 XE3 和 64 位?如果是这样,64 位通常不支持多个调用约定,因此几乎所有内容都是 cdecl。这是正常的
【讨论】:
以上是关于XE6 Ansi/Unicode 字符串链接器错误(未解决的外部问题)的主要内容,如果未能解决你的问题,请参考以下文章
Windows 记事本的 ANSI,Unicode,UTF-8 这三种编码模式有啥区别