项目迁移后未解决的外部问题
Unresolved External After Project Migration
我正在使用 C++Builder 10.4.1。我已经迁移了一个包含 3 个表单的简单项目。主窗体包含一个TDriveComboBox
。当我尝试编译时出现这些错误:
[ilink32 Error] Error: Unresolved external 'Vcl::Filectrl::TDriveComboBox::' referenced from (then it lists the path to the main form's OBJ file)
[ilink32 Error] Error: Unresolved external '__fastcall Vcl::Filectrl::TDriveComboBox::GetDrive()' referenced from (then it lists the path to the main form's OBJ file)
我什至尝试删除 TDriveComboBox
并替换它,但这无济于事。
有什么问题,我该如何解决?
我会:
- 删除所有临时文件(obj、exe、tds、...)
- 在存在此问题的表单上添加新临时文件
TDriveComboBox
- 编译并运行.
如果这没有帮助,那么有时手动 #include
VCL header 将组件包含在表单 *.h
文件中有助于重置 compiler/linker 因此在 VCL inc 文件夹中搜索TDriveComboBox
在我的系统中它在这里:
c:\Program Files (x86)\Borland\BDS.0\include\vcl\FileCtrl.hpp
所以添加如下内容:
#include <FileCtrl.hpp>
或
#include <vcl\FileCtrl.hpp>
到您的表格 *.h
文件中...但即使这样有时也会失败。 根据我的经验,问题出在项目文件(*.bds, *.bdsproj, ...
或较新版本的任何扩展)所以在编译器正常工作时备份它是个好主意。 . 因为 它有时会自我破坏 特别是对于大项目。
如果你搬家,有时也会有帮助:
#pragma hdrstop
排队到不同的地点(上下几行)。如果幸运的话,它还可以重置 compiler/linker ,之后您可以将其移动到原始位置。然而,这只是偶尔有用(比如 1:20)。而且你还需要尝试几个地方
如果没有任何效果只需创建新的空项目并将表单和内容复制到其中并将其添加到项目中...每个表单有 3 个文件(*.h,*.cpp,*.dfm
) 并且如果您的应用程序使用的所有第 3 方自定义内容没有直接与 #pragma link
链接,请不要忘记将您需要的任何内容添加到您的项目中(DLL *.lib,...)
一次(也是在从 BCB5 迁移到 BDS2006 之后)即使这对我的一个项目也没有帮助。我还被迫创建表单(包含所有组件,但没有功能,只是将它们放在表单上),然后从旧应用程序复制内容......但是,如果你有太多组件,这将是一个痛苦......
我发现 ide 在将我的 10.3.3 项目转换为 10.4.1 时产生的大部分问题都可以通过如下所述的恼人过程解决:
- 打开表格。
- 在设计选项卡上,切换到文本视图。
- switch to form view.
- 在项目下,只重新编译表单。
- 现在 运行 个项目。
除了_CG_*,这解决了我大部分未解决的问题。
我正在使用 C++Builder 10.4.1。我已经迁移了一个包含 3 个表单的简单项目。主窗体包含一个TDriveComboBox
。当我尝试编译时出现这些错误:
[ilink32 Error] Error: Unresolved external 'Vcl::Filectrl::TDriveComboBox::' referenced from (then it lists the path to the main form's OBJ file)
[ilink32 Error] Error: Unresolved external '__fastcall Vcl::Filectrl::TDriveComboBox::GetDrive()' referenced from (then it lists the path to the main form's OBJ file)
我什至尝试删除 TDriveComboBox
并替换它,但这无济于事。
有什么问题,我该如何解决?
我会:
- 删除所有临时文件(obj、exe、tds、...)
- 在存在此问题的表单上添加新临时文件
TDriveComboBox
- 编译并运行.
如果这没有帮助,那么有时手动 #include
VCL header 将组件包含在表单 *.h
文件中有助于重置 compiler/linker 因此在 VCL inc 文件夹中搜索TDriveComboBox
在我的系统中它在这里:
c:\Program Files (x86)\Borland\BDS.0\include\vcl\FileCtrl.hpp
所以添加如下内容:
#include <FileCtrl.hpp>
或
#include <vcl\FileCtrl.hpp>
到您的表格 *.h
文件中...但即使这样有时也会失败。 根据我的经验,问题出在项目文件(*.bds, *.bdsproj, ...
或较新版本的任何扩展)所以在编译器正常工作时备份它是个好主意。 . 因为 它有时会自我破坏 特别是对于大项目。
如果你搬家,有时也会有帮助:
#pragma hdrstop
排队到不同的地点(上下几行)。如果幸运的话,它还可以重置 compiler/linker ,之后您可以将其移动到原始位置。然而,这只是偶尔有用(比如 1:20)。而且你还需要尝试几个地方
如果没有任何效果只需创建新的空项目并将表单和内容复制到其中并将其添加到项目中...每个表单有 3 个文件(*.h,*.cpp,*.dfm
) 并且如果您的应用程序使用的所有第 3 方自定义内容没有直接与 #pragma link
链接,请不要忘记将您需要的任何内容添加到您的项目中(DLL *.lib,...)
一次(也是在从 BCB5 迁移到 BDS2006 之后)即使这对我的一个项目也没有帮助。我还被迫创建表单(包含所有组件,但没有功能,只是将它们放在表单上),然后从旧应用程序复制内容......但是,如果你有太多组件,这将是一个痛苦......
我发现 ide 在将我的 10.3.3 项目转换为 10.4.1 时产生的大部分问题都可以通过如下所述的恼人过程解决:
- 打开表格。
- 在设计选项卡上,切换到文本视图。
- switch to form view.
- 在项目下,只重新编译表单。
- 现在 运行 个项目。
除了_CG_*,这解决了我大部分未解决的问题。