Linker XE6 Ansi/Unicode字符串链接器错误(未解析的外部)

Linker XE6 Ansi/Unicode字符串链接器错误(未解析的外部),linker,unicode-string,ansistring,c++builder-xe6,Linker,Unicode String,Ansistring,C++builder Xe6,我的senario将把我的项目从XE3移植到XE6 当我将调用约定从C切换到stdcall时,我遇到了这些未解析的外部变量 从那里开始,UnicodeString(),~UnicodeString()(任何其他)将无法解析 我会比较XE3和XE6之间的ustring.h。看起来有很多变化 例如:Unicode析构函数 在XE3中,其贴花为: __fastcall ~UnicodeString(); ~UnicodeString(); 在XE6中,其贴花为: __fastcall

我的senario将把我的项目从XE3移植到XE6

当我将调用约定从C切换到stdcall时,我遇到了这些未解析的外部变量

从那里开始,UnicodeString(),~UnicodeString()(任何其他)将无法解析

我会比较XE3和XE6之间的ustring.h。看起来有很多变化

例如:Unicode析构函数

在XE3中,其贴花为:

  __fastcall ~UnicodeString();
  ~UnicodeString();
在XE6中,其贴花为:

  __fastcall ~UnicodeString();
  ~UnicodeString();
我将声明修改为:

  __cdecl ~UnicodeString();
这将更正链接器错误

这正常吗?这是正确的纠正方法吗

要获得问题,请执行以下操作:

    < LI>创建一个新的C++包;李>
  • 创建从TEdit派生的新组件,并将其添加到 包裹
  • 构建和链接=>一切正常
  • 然后转到项目选项,并将调用约定切换到stdcall
  • 生成和链接=>发生未解析的外部事件
提前感谢您的回答


N.Fortin

您是否碰巧使用32位XE3和64位XE6?如果是这样,64位通常不支持多个调用约定,因此几乎所有内容都是cdecl。这是正常的

我建议您将其作为一个回归错误提交给。因为兼容性类,比如<>代码> UnoDeSoScord<代码>,在预编译的RTL中实现,所以头文件需要匹配实际的调用约定,否则您会得到这些链接器错误,而不是C++编译器想要使用的。早期版本强制实现了平等,看起来有人在XE6I中搞错了。我已经为您提交了一份质量控制报告:。嗯,我就是这么想的!。谢谢你的QC日志,雷米。你还是那个!!我正在对产品进行评估,我正在与Embarcadero的一位卖家和一位工程师联系。我会把新的QC推荐给他们。