问题标签 [c++builder-xe4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1483 浏览

c++ - C++ Builder XE4 - 自动完成和语法错误突出显示

我是 C++ Builder 的新手。我正在尝试 XE4 版本,但它似乎没有自动完成包含或检查和下划线的错误语法,例如 VS。所以我可以放任何垃圾,编辑器不会以任何方式表明你在代码中犯了错误。至于自动完成包含:当包含标题时,如果标题存在,它不会指示任何内容。有谁知道这两个功能是否应该在 C++ Builder XE4 中工作,您只需要在某个地方打开它们,或者它们在这个 IDE 中不存在吗?谢谢

0 投票
1 回答
178 浏览

c++ - c++ 指示器/加载轮

我正在使用 RAD Studio 4 C++ 构建器,并希望在我的数据源从数据库中获取数据时显示一个指示轮。我知道 FireMonkey 有一个指示轮,但 c++ builder 似乎没有这样的组件。

有谁知道我可以使用的组件?

0 投票
2 回答
1928 浏览

c++builder - 在现代 C++Builder 应用程序中使用预编译头文件的最佳实践是什么?

我目前正在将一个大型 RAD Studio 2010 项目迁移到 XE4。作为其中的一部分,我正在重新创建许多项目文件。我想借此机会确保我们对预编译头文件使用了最好的机制,因为似乎有几种方法可以做到这一点。

现在我们只编译 32 位,但将来会使用 64 位编译器。

以下是我们目前在 2010 年所做的事情,以及为什么我不确定在 XE4 中该做什么:

在 RAD 工作室 2010 中

我们有一个文件PchApp.h,其中包含<vcl.h>和其他一些常用的头文件,主要是项目中各种常用核心类的头文件。此标头包含在每个 CPP 文件的顶部,后跟#pragma hdrstop,如下所示:

然后我们在项目选项的 Precompiled Headers 部分有以下设置:

当前 RS2010 预编译头设置

编译速度不是特别快(大约 350,000 行代码需要 12 分钟。)我不确定:

  • “注入预编译的头文件”:这应该注入 PchApp.h 吗?
  • “缓存预编译头文件(必须与 -H 或 -H“xxx”一起使用)”:-H 选项是“PCH 文件名”,所以我们使用它,但预编译头文件的重点肯定是它是“缓存”或每次编译预构建一次。这有什么额外的区别?
  • 我们是否应该在 .cpp 文件中包含两行来包含 PchApp.h 和 pragma hdrstop ?有没有办法只在项目选项中执行此操作,而不是在每个文件中重复这两行?他们有必要吗?

换句话说,我不确定这些设置是否正确或最佳,但通过阅读文档,我同样不确定什么会更好。我知道我对所有选项的理解不够透彻 - 这个问题的一个原因:)

在 RAD Studio XE4 中

XE4 32 位编译器的选项对话框是相同的,但有两件事让我感到困惑和/或让我不确定当前的 2010 方法是最好的。

1.默认行为

在创建新的 VCL Forms 项目时,IDE 会创建一个默认命名为 Project1PCH1.h 的头文件,该头文件旨在作为项目的预编译头文件。 此标头包括<vcl.h><tchar.h>,并且在项目管理器中显示为一个节点。它不包含在默认的 Form1.cpp 中,但#include <vcl.h>紧随其后的#pragma hdrstop是 Form1.cpp 的最顶部,然后是其他标题。

使用此标头的新项目的默认 XE4 设置对话框是: XE4 默认预编译头设置

我(天真地?)假设默认值实际上是最佳/最佳设置。有些事情让我感到困惑:

  • 该项目的预编译头文件Project1PCH1.h在任何地方的预编译头文件设置中都没有提及。
  • 标头未缓存
  • 未指定 PCH 文件名(应该是Project1PCH1.h?)
  • .cpp 文件也不包括在内Project1PCH1.h

事实上,我不知道编译器或 IDE 是如何真正知道它应该使用Project1PCH1.h或应该使用它的 .cpp 文件的,因为我找不到任何方式来引用它。

这对我来说是最令人困惑的事情,也是提出这个问题并消除我对 PCHe 的所有困惑的动力。我曾计划复制/使用 IDE 的默认设置,但在我了解他们在做什么之前我不想这样做。

2. PCH 向导

自 2010 年以来,IDE 已包含一个预编译的标头向导。我一直无法让它工作 - 我现在再次运行它以获得它的结果并解释我对“不起作用”的记忆,但它似乎需要几个小时,所以我会更新这个问题之后。

编辑:它运行,虽然它需要几个小时,并产生了一个列表(对我来说,知道源库)奇怪的标题。我对几年前尝试过的回忆是它根本没有运行 - 一个明显的改进。

由于它存在,它可能是在为升级 2010 项目而形成的新创建的项目文件中使用预编译头文件进行设置的最佳方式。我怎样才能最好地做到这一点?包括 PchApp.h 在内的所有 .cpp 文件都会混淆它吗?

问题

以此为背景,我有以下问题:

  • 现有设置。我正在创建一个新项目文件并添加数千个预先存在的 .cpp 文件,所有文件的顶部都带有“#include PchApp.h; #pragma hdrstop”。我应该复制现有的 RS2010 PCH 设置吗?我应该删除以上两行并用其他内容替换它们吗?
  • 使用 PCH 向导:根据您的经验,这是否可以创建最佳设置?它是否包含如果修改会导致项目的大部分区域被重建(可能不是编码的最佳选择)的文件?是否可以在现有项目上使用,或者像我们的“#include PchApp.h”这样的项目需要在使用之前删除吗?
  • CPP 文件/单位和正确的包括。使用预编译头文件的 .cpp 文件是否应该不包含预编译头文件本身,而只包含 .cpp 实际需要的头文件,即使 PCH 包含这些头文件?如果您有我们目前的情况,其中 PchApp.h 文件包含几个常见的头文件,而 .cpp 文件实际上并不包含这些文件本身,该怎么办?如果删除 PchApp.h 的包含并将其替换为特定 .cpp 文件所需的 PchApp.h 中的标头子集,它们应该高于还是低于 #pragma hdrstop?(以上,我认为。)如果您在上面包含其他未包含在预编译头文件中的内容怎么办 - 它会改变该特定单元的 PCH 使用情况,导致重建 PCH(性能问题?)等?
  • 默认设置:假设新项目的默认设置是最佳的,那么如何最好地将当前系统迁移到使用它?
  • 非默认设置:如果默认设置不是最优的,那是什么?我想,这是关键问题。
  • 32 位和 64 位:知道我们将很快迁移到 64 位,我们应该怎么做才能让预编译的头文件同时在 32 位和 64 位上工作?所有 PCH 知识都应该在项目选项中而不是 .cpp 文件中,所以 32 位和 64 位编译的设置不同?

我正在寻求一个清晰、详细、解释性、指导性的答案,一个清楚地解释最佳实践、设置选项、要包含在 .cpp 文件、标题和/或项目文件中的项目等等 - 换句话说,一些到现在(毕竟以上!)清理我的理解相当混乱。将来其他 C++Builder 用户可以将其用作 PCH 参考的高质量答案将非常好。我打算在可能的几天内增加赏金。

0 投票
3 回答
1866 浏览

msbuild - MSBuild 在 Cpp.Targets 中使用新的 XE4 项目搜索“True.dpr”失败

msbuild在 RAD Studio XE4 中的一个项目中遇到了一些奇怪的错误,我正在寻求帮助来诊断发生了什么。我已经遇到这个问题已经有几个星期了,但我自己并没有成功地解决它——是时候更广泛地询问了。症状是:

  • 使用已在 IDE 中构建和运行的项目,msbuild Project.cbproj似乎可以工作
  • 运行msbuild Project.cbproj /t:Clean正常,并且可以很好地删除中间文件。输出的视觉扫描没有显示任何不寻常的文件被删除 - 只是 .obj 文件、链接器状态文件、最终的 EXE 等。
  • 但是在清理或清理结帐后运行msbuild Project.cbproj /t:Build或只是简单地运行失败并显示以下错误消息:msbuild Project.cbproj

Microsoft (R) Build Engine 版本 3.5.30729.5420 [Microsoft .NET Framework,版本 2.0.50727.5472] 版权所有 (C) Microsoft Corporation 2007。保留所有权利。

构建开始于 2013 年 12 月 9 日 10:35:03。节点 0 上的项目“C:\projects\Project.cbproj”(默认目标)。

_PasDepCheck:修改:Source\Common\resample.pas _PasCoreCompile:Embarcadero Delphi for Win32 编译器版本 25.0 版权所有 (c) 1983,2013 Embarcadero Technologies, Inc. C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\ CodeGear.Cpp.Targets(191 1,5): error F1026: File not found: 'True.dpr' Done Building Project "C:\projects\Project.cbproj" (default targets) -- 失败。

构建失败。

"C:\projects\Project.cbproj" (默认目标) (1) -> (_PasCoreCompile 目标) -> C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\Bin\CodeGear.Cpp.Targets(1 911,5):错误 F1026:找不到文件:“True.dpr”

有些事情让我印象深刻:

  • 它在顶部列出了两个版本的 .Net,一个较旧的版本在方括号中。它可以加载或使用两个框架的一部分吗?
  • True.dpr不存在,我也找不到手动搜索.cbproj文件True.dpr的条目,或者True(在我看来)看起来可能被误解为项目名称的条目。(如果您不熟悉 Delphi,.dpr 文件是一个老式的项目文件 - 它包含入口点。构建一个可能意味着 msbuild 正在某处查找源或项目入口。在我看来,“真”就像 . cbproj 文件被误解或损坏 - 但它是全新的,所以不应该,它在 IDE 中工作。)

有关系统和项目的其他信息:

  • 该项目正在从 RAD Studio 2010 升级。但是,该项目文件是在 XE4中从头开始创建的,即它是全新的,通过在 IDE 中创建一个新项目并添加现有单元(Delphi 和 C++ 文件)。
  • 该项目是一个带有一或两个 Delphi 单元的 C++ 项目。在编译开始时编译 Delphi 单元时,您可以看到它正在倒下。对于那些不熟悉混合 C++ 和 Delphi 的人,通常在混合源项目中,IDE 或 msbuild 将首先编译 Delphi 单元(这样做可以创建/更新 C++ 头文件以与 Delphi 代码交互。)
  • 该项目是一组中的一个,但应该独立编译。
  • 我安装了带有更新 1 的 RAD Studio XE4。
  • msbuild正在从 RAD Studio XE4 命令行启动,即使用rsvars.bat文件设置路径等的命令行。
  • 在上面的输出中,我已将我们的真实项目名称更改为 Project,因为我不想识别它。但是,其余的输出是准确的。

有任何想法吗?我一直在努力解决它很长时间,我很难过。

0 投票
1 回答
1594 浏览

delphi - 与 C++Builder 2010 相比,是什么导致 C++ Builder XE4 中的 EXE 大小增加了三倍?

我已将项目从 RAD Studio 2010 升级到 RAD Studio XE4。该项目主要是 C++,使用 RAD Studio 的 C++ Builder 的一半,以及少量的 Delphi。

在 2010 年,发布版本为 22MB。在 XE4 下,相同的 Release 版本是 55MB。

这是一个问题,因为:

  • 55MB 对于 EXE 来说非常大
  • 启动程序花费的时间明显更长(不多,但有些。)
  • 我们的许多客户在海上时从偏远地区或船上下载新版本。大小事项。

什么可能导致这种情况,我该如何解决?


笔记

  • 奇怪的是,调试版本仍然只有 23MB。项目设置看起来非常相似。我对选项集的导出进行了比较,只看到<UsePackages>True</UsePackages>了 Release 而不是 Debug 中存在的东西;删除它没有任何区别。除此之外,还有代码优化开启并且缺乏_DEBUG定义。
  • 发布版本生成调试信息,但进入外部 .tds 文件。(这将在未来用于 EurekaLog,目前允许我们调试程序的发布版本。)我想知道链接器是否在调试信息中链接,但据我所知,C++ 链接器总是将调试信息放在存在的外部文件,加上构建中尚未启用 EurekaLog。
  • 项目文件 (.cbproj) 是在 XE4 中创建的,不是从旧的 2010 升级的。我创建了新项目并添加了旧的 .cpp 和 .pas 文件。这是为了避免升级引起的问题 - 在 Embarcadero 论坛上,通常建议在升级 IDE 版本时重新创建项目。在这之前,我遇到的问题确实比 2010 年少。
  • 很多人提到 Delphi XE2+ EXE 明显比旧版本的 Delphi 生成的要大。( 1 , 2 , 3 , 4 , 5 , 6。) 虽然 C++ 链接器与 Delphi 使用的不同,但原因可能是相似的。
    原因似乎主要是 Delphi RTL 代码使用的 RTTI,在 Delphi 项目中可以通过指定{$WEAKLINKRTTI ON}. XE4文档没有提到等效的 C++ 链接器 pragma。有#pragma explicit_rtti(C++ 的类似物{$RTTI})和__declspec(delphirtti)(C++ 的类似物{$M}/{$TYPEINFO})。
  • 该项目使用运行时包和动态 RTL 链接。它是一个 32 位的 VCL 表单应用程序。我在 Windows 7 上安装了 XE4 Update 1。
  • 编辑: David Heffernan在下面的评论中询问每个项目的 .map 文件大小。
    发布的 .map 大小为 17MB,.tds 大小为 80MB。
    Debug 现在已经停止链接,链接器报告它内存不足(一个旧的、旧的错误,应该在几年前修复。)没有生成 .map 或 .tds 文件,所以我无法给出比较大小准确。从内存中 .tds 大约是 100MB,不幸的是我不记得 .map 的大小了。如果我得到项目链接,我将更新问题。
  • 再次编辑:我找到了答案(排序) - 关闭“扩展内联函数”会将 EXE 大小减小到预期值。不过,这本身就令人费解-请参阅下面的答案。请注意,调试版本已关闭此功能,但仍无法链接,从而出现内存不足错误。
    我还没有将我的答案标记为正确,以防有人可以提供一些关于正在发生的事情的见解,这将是一个比“关闭此选项”更好的答案。
0 投票
1 回答
641 浏览

c++ - c++中的lambda方程

我想使用 lambda 方程。在 C++ Builder XE4 中,我尝试了以下方法。

但是,我收到“E2188:表达式语法”错误。

问题是什么?

我确信 boost 库已正确安装在我的环境中。

0 投票
1 回答
109 浏览

c++ - 功能模板的区别

我现在正在研究函数模板。

我尝试了以下代码。

在 C++ Builder XE4 上,我收到以下错误。

在这种情况下,我应该怎么做才能避免错误 2015?

0 投票
1 回答
1468 浏览

c++ - C++ Builder XE4 中的结构声明

我在 C++ Builder XE4 中尝试了以下代码。

我记得,结构类型名称可以用作类型(无需在变量声明中添加“结构”)。

但是,C++ Builder XE4 输出 pt1 声明的编译错误。

在 Ideone.com http://ideone.com/kVzrlc上可以编译相同的代码而不会出错

C++ struct 的 C++ Builder 实现是否有些不同?

0 投票
1 回答
47 浏览

c++builder - 关于使用 System.NoErrMsg

我正在研究C++ Builder XE4 中的System.NoErrMsg

从文档中,我推断通过将 NoErrMsg 设置为 true,我不会看到错误 MessageBox。

以下是我的示例代码。

但是,当我单击 Button1 时,上面的代码仍然显示错误消息框。

我对 NoErrMsg 的理解不正确吗?

平时是怎么使用的?

0 投票
1 回答
375 浏览

c++ - 我目前正在使用 C++ builder 6 XE4 来开发财务图表。移动到图表画布上的某个位置时出现异常

在使用 C++ builder 6 XE4 创建财务图表时,我试图创建、绘制线条特征。我创建的系列是蜡烛棒系列。我试图移动到鼠标指针所指出的 XY 坐标,但是每当点击下面的代码时,它就会引发异常。

Chart1->Canvas->MoveTo(10,20); --> 给出了一些有效值。

是否可以在图表上(不在表格上)画一条线或任何数字?如果是,请告诉我,应该怎么做。

谢谢。