问题标签 [c++builder-2010]
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.
c++builder - 如何创建气球提示?
我正在尝试在我的应用程序中使用气球类型 ui 创建一些提示,让用户查看有关需要在特定情况下采取的某些操作的信息,但我在论坛上查看了一些代码。我在以下站点http://www.tek-tips.com/viewthread.cfm?qid=1611641中找到了一个气球提示示例。我认为它是在 C++ Builder 2009 IDE 中创建的,并尝试使用 C builder 2010 IDE RS 对其进行编译,但我无法获得任何气球提示。首先,当我编译时,它停在下一行,例如
GetClientRect(hWnd, &ti.rect);
然后我将其更改为 GetWindowRect 因为GetClientRect
不需要将任何参数传递给此方法,尽管我更改了 clint-to-window 然后我终于运行了它...想它会显示提示,但没有任何工具提示。
此外,我还展示了我提供了链接的代码。
然后我问如何让它在builder 2010 IDE中工作???我想知道为什么它在 2009 IDE 中通过使用GetClientRect()
提供 2 个参数的 Windows API 函数来工作,当我在 Windows 7 的 C builder 2010 IDE 中编译它时,它说没有预期的参数......
c++ - Builder 2010“不可访问”错误
我正在尝试将我的项目从 C++ Builder 6 迁移到 C++ Builder 2010。项目中有一个 TChart。当我在 BCB 2010 中编译它时,我收到了很多错误,例如E2247 '_fastcall TSeriesPointer::ChangeStyle(TSeriesPointerStyle)' is not accessible
. 会是什么?
存在代码失败的字符串:
Series8——它是一个 TSeries 类型的对象。InpStr -- 是一个 UnicodeString 对象。
c++builder - C++ Builder 2010 奇怪的访问冲突
我有一个程序将成为使用 C++ Builder 2010 构建的现有更大产品的一部分。
较小的程序(还)不依赖于 C++ Builder。它在 MS Visual Studio 中运行良好,但使用 C++ Builder 会产生奇怪的访问冲突。
请让我解释一下。
根据代码和编译器设置,访问冲突发生或不发生。访问冲突是可重现的:当程序构建时,访问冲突永远不会发生,或者总是在同一个地方发生。如果使用相同的设置重建程序,它将显示相同的行为。(我真的很高兴)。
访问冲突发生在调用删除运算符的地方。这可能发生在某些析构函数内部(取决于编译器设置和确切的代码),包括自身类的析构函数和 std::string 的析构函数内部。
以下情况降低了访问冲突的可能性:
- 使用“调试”设置(而不是“发布”)构建。
- 没有编译器优化。
- 编译器开关“慢速异常尾声”。
- 静态 RTL 而不是动态。
- 从 std::exception 而不是 Borland 的 Exception 类派生异常。
- 使用较少的“复杂”表达式(例如,使用“string s = “...” + “...”; throw SomeException(s);" 而不是 "throw SomeException(string("...") + ".. .");")
- 使用 try... __finally 进行手动清理,而不是使用带有析构函数的自动变量。
- 使用小型控制台应用程序而不是 VCL Windows 应用程序。
该程序利用了几个 C++ 特性,包括异常、STL、移动构造函数等,当然它也使用了堆。
我已经尝试了一些工具,但都没有报告问题:
- Borland 的 CodeGuard。
- Microsoft 应用程序验证器。
- 页堆/gflags。
- 如前所述,使用 MS Visual Studio 构建绝对没有问题。
预编译头文件和增量链接(在我看来都容易出错)的使用被禁用。
C++ Builder 编译器(“启用所有警告”)和 Visual Studio (/W4) 编译器都不会产生可能与此问题相关的警告。
我无权访问其他版本的 C++ Builder。
由于程序将成为更大产品的一部分,因此不能选择切换到不同的编译器,也不能选择调整编译器设置,直到不再发生访问冲突。(我担心如果这真的应该是编译器错误,那么该错误可能会再次出现。)
综上所述,我猜这可能是由于与某些编译器错误相关的堆损坏造成的。但是,我无法在 qc.embarcadero.com 上找到错误。我进一步猜测这与在抛出异常时堆栈倒带时执行的清理代码有关。但是,好吧,也许这只是一个愚蠢的代码错误。
目前,我不知道如何进行。任何帮助表示赞赏。先感谢您!
c++builder - 如何处理表单的组件
我正在以Show
事件的形式动态创建组件。我需要在 Close 事件上破坏所有组件,因为下次 OnShow 事件应该再次创建组件。这里组件的数量根据数据行的数量而变化。我在用着
但是当我下次调用它时,要么显示访问冲突,要么组件已经存在消息,因为它根本没有很好地处理组件。
如何正确处理表单及其组件?
c++ - 使用 Indy comps 检查网络中的远程主机状态
我有与 Firebird 服务器一起使用的客户端服务器应用程序。每次当客户端连接到服务器时,他们(客户端应用程序)不检查是否有网络连接到服务器所以此时我的应用程序有时会在服务器计算机关闭或服务停止时冻结,所以首先我如果远程主机已打开或在某个端口有任何监听,则需要检查连接....
在建立连接之前,我需要检查它并确保服务器和服务正在使用 Indy 组件运行。
有任何想法吗?我也可以使用 IcmpClient 来 ping 远程主机,然后建立连接,但哪种方式是最佳方式?
c++ - 是否可以在 C++ Builder 中静态编译 boost::recursive_mutex
boost::recursive_mutex
并且boost::lock_guard
似乎在 C++ Builder 2010 中使用boost_thread-bcb-mt-1_39.dll。我看到还有静态版本 - boost_thread-bcb-mt-1_39.lib。
我的代码是这样的:
但是,如果我将编译选项设置为Release并将 Dynamic RTL 选项设置为False ,我得到的只是将 dll boost 库与静态运行时混合是一个非常糟糕的主意...。将动态 RTL 恢复为True可以编译,但它需要额外的 DLL - cc32100mt.dll和boost_thread-bcb-mt-1_39.dll。
有没有办法在单个 exe 中静态编译它?毕竟提供了LIB文件,应该是可以的。这个版本的 C++ Builder 或 Boost 有问题吗?
c++ - “使用声明”在 RADStudio 2010 中不起作用
我正在从 VCL 类派生一个新TStream
类:
TStream
声明了 Seek 的以下两种变体:-
但是在编译我的课程时我收到以下 W8022 警告:-
当然 Using 声明应该解决这个问题?
为了将这个问题拖回正轨,我知道两个版本的 TStream::seek 相互关联的方式,我只是想获得派生类公开的继承 Seek(int,int) 方法。为什么我的using
声明不这样做?
c++builder - 在borland c ++ builder中的表单之间传输数据
我在 c++ builder 中设计了两种形式:
- 主函数
- 选择名称
在 TfrmMain 类中,我有一个名为 btnNext 的按钮。单击 btnNext 时,下面的代码将运行并创建新的 TfrmChooseName。
同样在 TfrmMain 我有名为 txtInput 的 TEdit 控件。
在 TfrmChooseName 的构造函数中,我想获取 txtInput 的文本并将其设置为表单的标题,但发生访问波动错误!
我也让这两个班级成为朋友!
c++builder - 即使另一个正在工作,也要保持一个表单更新
我创建了一个小表单,我想在它们工作时将其放在其他表单之上。基本上就像一个小的“正在加载...请稍候”通知。它包括一个动画TGIFImage。问题是,当另一个表单正在努力工作时,这个表单的动画和更新会卡顿。可能是因为它们在同一个线程中运行?有没有一种快速简便的方法可以让这个小表格总是很好地更新?也许是确保它在自己的线程中处理的快速方法?
map - 在地图中使用 AnsiString 作为键时的奇怪问题
我有一张地图
map<AnsiString, Foo*>
当我尝试在地图中查找值时,我使用从 a 接收到的字符串TMemoryStream
并将其发送到一个Foo* GetFoo(AnsiString)
函数,该函数又创建一个迭代器并返回找到的对象。这在大多数情况下都可以正常工作,但在 ONE 函数中它不返回值。
如果我这样做FooID = FooID.SetLength(FooID.Length() - 1);
AnsiStringFooID
用于查找它的工作原理并返回正确的结果。我在想流中可能有一些垃圾,但是当我查看在开箱即用的地方和需要破解的地方使用的 AnsiStrings 时,它们是相同的!?
这是根据 IDE 的调试值检查器...所以那里可能有一些诡计。但是到底是什么导致了这个???
更新:
我找到了operator>>
使用的实现。
单步执行似乎可以正确处理接收到的字符串。但我似乎记得听说过这个问题WideString
并不少见:P
更新 2:
我实际上找到了一个实例,其中返回的字符串长度为 6 个字符加上结尾\0
,但大小设置为 7。所以我想我的解决方案将在应用程序中发送该字符串,因为它提供了错误的大小。