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

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 投票
1 回答
530 浏览

c++ - c++-builder:转换成stdcall类型

我目前正在尝试移植旧的 owl-c++-builder-projekt 以使用 XE2 和 owlnext。在旧文件中,我可以简单地调用一行

虽然 LP_I2Open 定义为

这些代码块实际上来自多个文件。我认为这个顺序很直观。

现在我有一些困难来根据需要重写它。我了解,现在左侧被理解为返回值的转换方法,但不能分配给特定值,因此会引发“L-Value expected”错误。但是,我不太清楚如何将 FARPROC 转换为适合 LP_I2COpen 的东西...尝试不进行任何转换会引发此错误:

那么,有人知道我在这条线上犯了哪些错误吗?

问候,朱利安

0 投票
2 回答
790 浏览

global-variables - 当组件调用单元时,c ++ builder XE2中的变量未初始化

我有一个带有声明的单元(WebFunctions.h)

这个单元在应用程序中运行良好。但是当我添加一个也声明的组件时,不会发生WebFunctions.h初始化( )。RawURLAllowedCharsRawURLAllowedChars = NULL

要让应用程序恢复工作,加上删除组件的类声明仍然需要删除WebFunctions.obj文件。

注意:.cpp文件中的任何声明,无论是否有文件中的extern声明.h,都不起作用。

这是 XE2 中的错误还是我遗漏了什么?谢谢。

Obs.: 内部变量声明#ifndef .. #endif

0 投票
1 回答
577 浏览

c++ - 单击按钮时更改 ADOTable 中的 TableName

我有一个用 MS Access 制作的数据库,其中包含 2 个表。表 #1 显示在 DBGrid 中。我希望表#2 在按钮单击时显示在 DBGrid 中。以为会像: ADOTable1->TableName = table_n2,但我错了。有人知道解决方案吗?

0 投票
2 回答
8263 浏览

c++ - 在 C++ 中将 UnicodeString 转换为 const char* 的最简单方法?

我是 C++ 新手,在将 UnicodeString 转换为字符串时遇到问题,所以现在寻找最简单的方法来从一种类型转换为另一种类型。

我想使用基本的windows函数,它需要带有UnicodeString的字符串,如何使代码工作?

使用的环境是c++ builder xe2

0 投票
1 回答
120 浏览

tstringgrid - StringGrid 中的固定列

例如,可以仅修复 StringGrid 中的第三行?StringGrid 具有 FixedColumn 属性,但您只能从头开始修复列。

天呐!

0 投票
3 回答
665 浏览

c++ - c++ builder xe2 上更不稳定的行为:DYNAMIC_CAST 始终返回 NULL

好吧,由于 Embarcadero,我几乎要放弃大约 12 年的 delphi 和 c++ builder 了。从来没有见过这么有问题的IDE。

这次的问题是 dynamic_cast 总是返回 NULL。

在同一个单元中,我派生了两个类:

转换为 TStructTreeView 工作正常:

但是对 TStructTreeNode 的强制转换总是返回 NULL:

请注意 Items->Item[i] 实际上是 TStructTreeNode ,因为下一个代码可以正常工作:

创建的节点如下:

在同一个包中,我还有其他组件,其类 TMDTreeNode 和 TMDTreeView 以相同的方式派生,在该单元中,所有 dynamic_casts 都有效。

欢迎任何光线。

PS:虚拟析构函数已作为其他帖子添加并且无法正常工作。

0 投票
1 回答
766 浏览

crash - 每次在调试器中运行或应用程序在下次运行时崩溃后都需要重新启动 C++Builder XE3

这有点奇怪,我似乎只在 Windows 7 上看到这个(当我在 Windows 8 中构建应用程序时,这似乎没有发生)。我通过 XE3 在 C++Builder XE 中看到了这一点。我将编译一个应用程序(静态链接包和 rtl),然后从调试器中运行它。如果我随后更改代码并尝试重新编译并运行应用程序,编译似乎正常,但应用程序在尝试启动时崩溃。如果我关闭 C++Builder 并重新打开它,然后强制它通过重新构建全部或进行一些小的更改来重新构建,它编译并运行良好。每次都是这样。我过去曾尝试切换到动态链接 rtl 并且“出现”以使问题消失,但我不确定这是否是一个可靠的假设。有没有人看到这种行为,有没有人知道如何解决它。

编辑: 崩溃发生在我的任何代码之前。这是调用堆栈:

顺便说一句:这个项目中没有延迟加载 dll。

0 投票
2 回答
2691 浏览

firebird - Firebird 插入速度很慢

我在 Firebird 数据库上执行 INSERT 语句时遇到问题。性能值如下:

在装有 Windows XP 的笔记本上插入 3800 条记录大约需要 31 秒(大约每秒 120 次插入)。在另一台装有 Windows 7 32 位的 PC 上,同样的任务需要 80 秒(每秒约 50 次插入)!使用的 Firebird 版本是 2011 年 10 月的 2.5.1 SuperServer。使用的连接技术是 DBExpress。

这就是我的数据库表的创建方式:

这是访问它的源代码。与现实相比,它有些简化(不包括调用者方法),但确实包括了所有基本的东西。Profiler 表明这种特定方法是瓶颈。一次调用大约需要 10 毫秒。所以 3800 次调用需要约 38 秒。

正如您从代码的注释部分中看到的那样,我尝试对 SQL 查询进行参数化以加快其重复执行速度,但没有进行重大更改。所有调用都在事务内部:

gstat -h 命令对数据库文件的输出如下:

firebird.conf 中的 DefaultDbCachePages 为 2048。

在删除和插入记录的过程中,fbserver.exe 进程充分利用了一个 CPU 内核。

0 投票
1 回答
247 浏览

c++ - C++ Builder 链接器是否支持函数级链接?

我在用 C++ Builder 编写的各种项目上工作了将近两年。在此期间,我注意到一些与生成的可执行文件大小有关的事情。我试着用两个例子来描述它:

1.今天我将一个项目从 C++ Builder 6 转换为 C++ Builder XE4。这是DLL大小的比较:

两个二进制文件都编译为带有附加库的静态链接的发行版。除了更改定义​​库版本的全局变量和包含产品信息(版本、描述、公司等)的可执行属性外,这两个版本之间没有源代码更改。

2.我在用 C++ Builder XE2 编写的 VCL 项目中添加了一些来自 JCL(JEDI 代码库)项目的文件。我的代码中没有创建来自 JCL 的对象,所以我认为链接器不应该链接新方法,即使它们是代码的一部分。尽管如此,二进制大小从 17 900 000 增加到 19 300 000。我没有确切的数字,因为还有其他细微的变化。这种增加的一小部分可以归因于链接资源文件 JclUnicode.res,它是 170 kB 大。尽管如此,这与我的长期经验是一致的,即当我们将其与最终用户的新功能进行比较时,在添加一些外部组件来投影二进制大小的结果变化时是不合适的。

我怀疑生成的二进制文件中有很大一部分代码从未被调用。不幸的是,我不知道如何验证这个假设。是否有一些工具可以分析生成的二进制文件以查找从未使用过的代码/数据?C++ Builder 链接器是否支持函数级链接?如果我们考虑到将可执行文件从硬盘驱动器读取到内存所需的时间以及程序占用的 RAM 内存大小,这是一个非常实际的问题。我正在开发嵌入式软件的同事告诉我一个故事,如何通过从固件中删除从未调用的函数将其大小减少了 80%。

0 投票
1 回答
128 浏览

c++ - 如何转换 CImg到 TBitmap?

在我的项目中,我正在使用 CImg 库,在图像处理之后,我想在 C++ Builder XE2 中的 TBitmap 中显示我的图像结果,请有人告诉我该怎么做。谢谢。