System.UStrClr访问冲突

时间:2016-06-13 17:43:27

标签: c++ c++builder access-violation vcl

使用 RAD Studio 10.1 Berlin 将旧桌面应用移植到现代。应用程序最后是在C ++ Builder 6中构建的(许多,很多以前)。

管理以排除所有组件和外部库依赖关系,但似乎Unicode端口存在一些挥之不去的问题。该应用过去严重依赖内置的String类型,现在对应AnsiString

源代码构建,但是在执行任何应用程序代码之前,二进制文件会在某处抛出访问冲突。错误堆栈跟踪:

rtl240.@System@@UstrClr$qqrpv + 0x12
largest_pos
__linkproc__ Attributebitmaps::Initialize 0x18
__init_exit_proc
__wstartup

largest_pos函数执行一些数字操作 - 没有任何类型的String依赖项。

Attributebitmaps是一个静态类,没有名为Initialize的成员。在Delphi中,您可以在单元级别声明InitializeFinalize调用,但在C ++ Builder中不使用该构造。

有关System.UStrClr错误发生原因的任何想法?您将在哪里挖掘以更深入地了解这一点?

1 个答案:

答案 0 :(得分:0)

与SO上的许多其他帖子中提到的静态初始化器fiascos相关,在这种情况下的罪魁祸首是以下模式:

.h档案:

class SomeClass {
    static String SOME_STATIC_STRING;
};

String SomeClass::SOME_STATIC_STRING("foo");

如果您确实选择使用这样的初始化程序,则应将其移至.cpp文件。