System.UStrClr 访问冲突
System.UStrClr Access Violation
使用 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
函数执行一些数值操作 - 没有任何类型的字符串依赖性。
Attributebitmaps
是一个静态 class,没有名为 Initialize
的成员。在 Delphi 中,您可以在单元级别声明 Initialize
和 Finalize
调用,但 C++ Builder 中不使用该构造。
关于 System.UStrClr
中为什么会发生错误的任何想法?您会去哪里挖掘以更深入地了解这一点?
与 SO 上许多其他帖子中提到的静态初始化程序失败相关,这种情况的罪魁祸首是以下模式:
.h
文件:
class SomeClass {
static String SOME_STATIC_STRING;
};
String SomeClass::SOME_STATIC_STRING("foo");
如果您确实选择使用这样的初始化程序,则应将其移至 .cpp
文件。
使用 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
函数执行一些数值操作 - 没有任何类型的字符串依赖性。
Attributebitmaps
是一个静态 class,没有名为 Initialize
的成员。在 Delphi 中,您可以在单元级别声明 Initialize
和 Finalize
调用,但 C++ Builder 中不使用该构造。
关于 System.UStrClr
中为什么会发生错误的任何想法?您会去哪里挖掘以更深入地了解这一点?
与 SO 上许多其他帖子中提到的静态初始化程序失败相关,这种情况的罪魁祸首是以下模式:
.h
文件:
class SomeClass {
static String SOME_STATIC_STRING;
};
String SomeClass::SOME_STATIC_STRING("foo");
如果您确实选择使用这样的初始化程序,则应将其移至 .cpp
文件。