Embarcadero Cbuilder [ilink32错误]错误:无法解决的外部'System :: Sysutils :: Exception :: {1173} ...'

问题描述

我认为我理解“未解析的外部符号含义”的概念-对象已全部编译,并且在链接阶段,链接器在任何地方都找不到该特定符号的定义(主体)。因此,我想我要么必须使用不同的符号,要么必须向项目中添加一些缺少的系统库。我不确定哪个是正确的以及如何检查(以前没有RAD的经验)。

我正在将一些旧代码(win95)转换为win10,我在最新的RAD Studio 10.3下启动了一个新项目,并手动添加了所有源文件添加到项目中)。我在这里看到了一个建议,我应该确保编译器没有混合在一起。我可以看到所有源文件都是使用bcc32c编译的。在文档中,我可以看到Exception基本上仅提供各种构造函数http://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.Exception

链接阶段,我得到了上面的错误-[ilink32 Error] Error: Unresolved external 'System::Sysutils::Exception::{1173}...'

所有调用最初都是Exception(“ constant”)或Exception(“ constant” + AnsiStringVariable)。由于大多数问题是由旧的调用方案引起的,因此我尝试将其更改为Exception(L“ constant”)和Exception(L“ constant” + UnicodeString),但这显然不是问题。

谢谢您的建议。

解决方法

很清楚这段代码:

 if(x!=S0getb()) Exception("Bad final checksum!");

生成有问题的错误。问题是缺少throw。可能以某种方式在以前的版本中进行了编译,没有人注意到。我猜缺少功能符号的错误代码和缺少类符号的错误代码之间会有区别。但是我没有意识到这是一个函数调用,而应该是一个新的类实例。

正确的代码:

 if(x!=S0getb()) throw Exception("Bad final checksum!");

解决了该问题。