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

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 回答
1435 浏览

c - GetTextMetrics 为 Courier New 返回不同的最大和平均字符宽度

我正在使用在 Windows 7 上运行的 Borland C++ Builder 6 维护一个应用程序。

该应用程序使用字体 Courier New 错误地绘制文本,因为每个字母都被略微切断。问题在于调用 GetTextMetrics 方法时,因为它使用不同的 tmAveCharWidth 和 tmMaxCharWidth 值填充 TEXTMETICS 结构。然后应用程序使用 tmAveCharWidth 来计算字符宽度是错误的,因为该值可能小于 tmMaxCharWidth。这个问题我会解决。

我很好奇为什么 GetTextMetrics 会为 Courier New 返回不同的 tmAveCharWidth 和 tmMaxCharWidth 值?我的理解是 Courier New 是等宽字体,并且 tmAveCharWidth 和 tmMaxCharWidth 应该相同。我用其他等宽字体测试了这个假设是正确的。

这是有问题的代码部分:

这是我选择 12 号 Courier New 时运行的代码。

传递给 CreateFontIndirect 的参数

从 GetTextMetrics 返回的 TEXTMETRICS 结构

0 投票
1 回答
157 浏览

sql-server-2008 - 如何导致超时

我们正在调查超时问题,并希望将其复制为初始测试的一部分。

我是 Devart、Borland C++ Builder 6 和 SQL Server 的新手,不确定所需的语法。我正在寻找示例代码来执行一个查询或一系列查询以生成无限期延迟,该延迟将超时。

0 投票
2 回答
271 浏览

c++ - SQLite。C++Builder 6 CodeGuard 中 sqlite3.c 中的大量“访问溢出”“算术溢出”“资源泄漏”

我有一个 Borland C++Builder 6.0 项目。在这个项目中,我使用 SQLite 库。我使用 sqlite3.c 文件(SQLite 合并 3.7.11)。一切正常。但是当我在 C++Builder 中启用 CodeGuard 时,CodeGuard 在 sqlite3.c 中给了我很多错误。像“访问溢出”“算术溢出”“资源泄漏”。

我试图在项目的数据库中插入 100000 条记录。执行此操作大约需要 130 秒,并且该进程使用的内存根本没有增加。所以我认为实际上没有内存泄漏。

我的问题是:我应该认真对待 sqlite 中的 CodeGuard 错误吗?或者我可以忽略它们吗?也许他们是误报?还是 C++Builder 6 编译器不适合 SQlite?

0 投票
1 回答
489 浏览

winapi - Windows 2000/XP 中涉及临界区的错误行为

最近我尝试在 Windows 7 x64 上运行一个旧应用程序(用 Borland C++ Builder 6 编写),发现 IO 线程不工作。调试表明问题出在错误处理类没有离开临界区(间接地,通过一个简单的包装类),因此添加到日志的每条消息都会导致两次调用,EnterCriticalSection但只有一次调用LeaveCriticalSection.

在我看来,这个错误应该使该类无法使用,但它是原始开发人员积极使用的常见类之一,并且这个特定的应用程序在 Windows 2000/XP 中始终运行良好。所以问题是为什么这个错误只出现在 Windows 7 中?

我在这里阅读了有关关键部分和建议问题的 MSDN 文章,唯一注意到的行为变化是未定义的获取顺序,这绝对不是这种情况。

0 投票
2 回答
6625 浏览

string - Borland C++ Builder 6 和字符串连接

我正在使用 Borland C++ Builder 6 来尝试做一些简单的字符串连接。但是,我遇到了一个我认为有趣的问题。

我能在网上找到的所有东西都表明我应该能够做这样简单的事情:

但是,当我尝试编译此代码时,我收到“无效的指针添加”错误。我可以将每个部分分配给它自己的变量并将每个部分加在一起以获得所需的输出。但是,鉴于这是一个多么简单的例子,我认为这是不必要的。

我能够使与上述类似的东西按需要工作的唯一方法是这样做:

我的问题是:为什么第二个例子可以正常工作,但第一个例子不行?

0 投票
1 回答
302 浏览

sql-server-2008-r2 - AnsiString 被截断有足够的空间

我正在插入一个JOBCODE字段定义为的行varchar(50)。当该字段的字符串大于 20 个字符时,我从 SQL Server 收到一个错误,警告该字符串将被截断。

我怀疑这可能与 Unicode 宽字符有关,但我认为 25 个字符会通过。

有没有人见过这样的东西?我错过了什么?

0 投票
1 回答
423 浏览

drag-and-drop - 右键单击将 TPopupMenu 解释为拖放

我有一个按预期工作的弹出菜单。同一对象上的拖放功能按预期工作。把它们放在一起,然后...

右键单击时会出现弹出菜单。当菜单仍然存在时,随后在弹出菜单上但仍在对象上的左键单击会调用拖放功能,就好像最初的右键单击是一直保持到现在然后释放的左键单击.

我做错了什么?我怎样才能解决这个问题?

0 投票
1 回答
990 浏览

c++ - Builder 2010“不可访问”错误

我正在尝试将我的项目从 C++ Builder 6 迁移到 C++ Builder 2010。项目中有一个 TChart。当我在 BCB 2010 中编译它时,我收到了很多错误,例如E2247 '_fastcall TSeriesPointer::ChangeStyle(TSeriesPointerStyle)' is not accessible. 会是什么?

存在代码失败的字符串:

Series8——它是一个 TSeries 类型的对象。InpStr -- 是一个 UnicodeString 对象。

0 投票
2 回答
3067 浏览

c++ - 虚拟内存地址空间不足(Borland C++ Builder 6 程序)

我对在 C++ Builder 6 下编写的一些应用程序有问题。运行一段时间(周、月)后,应用程序崩溃并关闭,没有任何错误消息。在崩溃前不久的应用程序日志中,我收到了许多“内存不足”异常。当它抛出内存异常(下面的屏幕截图)时,我查看了该进程,它有很多未提交的私有内存空间。这种行为的原因是什么?

几年前,我曾经遇到过这样的问题。原因是链接器选项中未选中“使用动态库”选项。当我检查回来时,问题消失了,反之亦然。我制作的测试应用程序只是调用“new char [1000000]”然后删除。每次都释放内存(Windows 任务管理器中没有提交的内存增加),但一段时间后我的内存不足,VMMap 显示完全相同的内容。大量保留的私有内存,但大部分未提交。

现在问题又回来了,但我不能以同样的方式解决它。我不知道这是否是原因,但我将 Builder 6 和 2010 安装在同一台机器上。现在我只有 Builder 6,似乎我无法像以前一样使用测试应用程序重现错误。以太方式似乎存在一些内存管理器错误或其他东西。CodeGuard 不显示任何内存泄漏。当我用“新”创建内存块时,它会立即显示在“内存提交大小”中,当删除时内存使用量减少,所以我假设内存泄漏不是这种情况,任务管理器没有显示太多“内存提交大小” .

有什么我可以做的吗?有什么办法可以释放未提交的内存?如何进一步诊断问题?

截图:http: //i.stack.imgur.com/UKuTZ.jpg

0 投票
0 回答
4699 浏览

soap - Borland C++ Builder 6 中的 SOAP Web 服务客户端

下面是在 Borland C++ Builder 6 开发的应用程序中开发 Web 服务客户端的分步尝试。欢迎帮助更正此代码或建议任何其他解决方案(尽管我现在尝试使用开发的 dll C++ 生成器 XE3)。这是我在 Borland 6 C++ Builder 中使用 Soap 的尝试。直到现在我得出的结论是我不能成功,因为 Borland 6 不管理 SOAP 标头(没有 InvokeRegistry.hpp)并且我们发送请求的 SOAP 服务器需要在登录此接口后传递 cookie:

此登录首先发送一个:

那么如果我添加这个调用就可以了:

然后我将用户名传递给 HTTPRIO :

这个 HTTPRIO 被传递到第二个接口:

但是我们得到一个错误“AuthHeader is missing”,因为我们使用了 Borland 6 的 WSDL 导入器,它不会为标头生成代码,并且标头未在 Invokeregistry.hpp 中定义。所以在我们 HTTPRIO 的“BeforeExecute”中,我们有这个请求:

而 Borland XE3 生成的这个请求没问题,并从服务器带来了预期的响应:

所以我先换了

经过

然后添加选项,例如 "<< xoHolderClass << xoInlineArrays" :

在这里,我获得了相同的请求,但服务器的答案是一个 NULL 数组,而用 borland xe3 编写的测试的答案中有三个项目。或者使用其他操作(没有 xo... 选项)我在 delphi 接口析构函数中遇到访问冲突:

我探索了其他解决方案(例如使用仅在 Delphi 源(无 C++ 源)中可用的 indySOAP,考虑创建 XML 并使用 Indy 组件发送(但预计我会遇到相同的身份验证标头问题?),使用 CAPICOM,或windows SDK?...)但直到现在都没有成功,正如之前所说,我现在尝试使用在 C++ Builder XE3 中开发的 dll: https ://stackoverflow.com/questions/15485276/embarcadero-c-xe3-dll-imported -in-c-xe3-project-library-loads-but-access-v