问题标签 [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.

0 投票
1 回答
1093 浏览

c++ - 如何在 C++ Builder 中创建 ITaskbarList3?

我正在尝试使用 Windows 7 引入的ITaskbarList3界面,以便可以在任务栏图标中显示冗长任务的任务进度。文档指出,在尝试初始化 ITaskbarList3 组件之前,我应该等待 TaskbarButtonCreated 消息,但我似乎没有收到任何 TaskbarButtonCreated 消息。

这是我到目前为止所拥有的:

我的 .cpp 文件中有一个全局变量来存储 TaskbarButtonCreated 的自定义消息 ID。

我创建了一个单独的 WndProc 函数来处理新消息。

在我的表单构造函数中,第一行将 WindowProc 属性设置为 WndProcExt 以路由消息。我还尝试在 ChangeWindowMessageFilter 中折腾,以查看 TaskbarButtonCreated 消息是否因某种原因被过滤。

在调试器中,ChangeWindowMessageFilterEx 的返回值始终为 true。我还确认我的 WndProcExt 函数接收到各种 Windows 消息,但不是我要查找的消息。OnTaskbarBtnCreated 函数永远不会被调用。

我错过了一步吗?在我的消息处理程序准备好之前,消息是否被过滤或发送?

0 投票
1 回答
306 浏览

com - C++Builder 2010 没有 CComHeapPtr?

我正在尝试将CComHeapPtr智能指针与 Embarcadero C++Builder 2010 一起使用,但在任何提供的标头中都找不到定义。我得到这个错误。

它不在atlbase.h(并且atlalloc.h似乎完全丢失)。

我打算使用它来提供异常安全的ItemIDListIShellFolder::ParseDisplayName.

它是否存在于这个版本中,还是 C++Builder 只是使用了一个非常旧的 ATL 版本?

而且,除了自己动手,还有更好的选择吗?

0 投票
1 回答
1111 浏览

c++builder - 在单独的线程中运行表单

假设我有一个表单 Foo。即使主应用程序线程可能正忙于做其他事情,我如何创建一个在它自己的线程中运行并得到更新的实例?例如处理阻塞网络通信或类似的东西。

我了解基本原理,并且我需要创建一个新线程,在该线程中创建表单实例等。但是我认为我需要该线程/窗口的更新循环,我完全不确定它应该是什么样子。

0 投票
1 回答
333 浏览

compiler-construction - Embarcadero C++ Builder 2010 - 编译

我使用 Embarcaedro C++ Builder 2010 几个星期了,编译过程有些麻烦。

首先,是否有人知道防止 C++ Builder 重新编译每个尚未编辑的源文件的技巧?其次,为什么编译器编译的代码行数比项目实际包含的多?它大大增加了编译时间!

我浏览了网页却没有得到满意的答案。我试过了 :

  • 保存目标文件
  • 禁用预编译头文件
  • 将包含(头文件和库)从最常用到最少使用
  • ...

我正在开发一个包含数千行代码的项目,因此编译过程需要很长时间才能完成.. 某处可能有问题..

0 投票
2 回答
1506 浏览

c++ - TStringList C++ 生成器访问冲突

我试图访问 a 中的特定项目,前提TStringList是它们存在。

为什么这会给我带来访问冲突,我该如何解决?

0 投票
1 回答
453 浏览

c++builder - 在运行时更改 MainForm

如何在运行时更改应用程序的 MainForm?

0 投票
1 回答
134 浏览

c++ - 旧代码中右值引用的无效使用:我应该如何将其更新为现代的正确用法?

我正在将一个大型项目从 C++ Builder 2010 移植到 XE4,并且刚刚遇到此代码。它在 CB2010 中编译、运行并且显然可以工作,并且根据修订日志是在我们仍在使用 C++ Builder 2007 时添加 的。这些编译器都不支持右值引用。

有两点需要注意:

  • operator=更改复制的对象是故意的。此类包装一次只能由一个对象拥有的资源。这超出了这个问题的范围,但这种行为虽然很奇怪,但却是设计的。还有一个复制构造函数和一些其他方法也进行了类似的更改。这些方法旨在用于复制的对象即将变得无效(例如被破坏)或将被重新用于保存新事物的情况。我不知道为什么static_cast<void*>需要比较指向相同类型对象的指针;对我来说,这似乎是一件很奇怪的事情。
  • 代码从使用标准引用(即VOperandValue& oOther)更改为右值引用。尽管仅在 C++Builder XE(C++Builder 2010 之后的版本)中添加了对右值引用的支持,但编译器很高兴地接受并编译了它,并且代码在运行时似乎可以正常工作。

现在这段代码被加载到XE4中,编译失败就行CopyAndTakeOwnershipFrom(oOther)了,错误如下:

[bcc32 错误] OperandValue.cpp(178):E2559 无法使用“VOperandValue”类型的左值初始化“VOperandValue”类型的右值引用

[bcc32 错误] OperandValue.cpp(178):E2342 参数“oOther”中的类型不匹配(需要“VOperandValue &&”,得到“VOperandValue”)

(我不明白这些错误,因为第 178 行是第 178 行CopyAndTakeOwnershipFrom(oOther);,并且oOther似乎肯定已在方法参数列表中定义为右值引用。为什么在传递时遇到左值非 r-ref 的问题同一个变量?)

我有两个问题,一个主要的实际问题和一个次要的好奇心问题:

  1. 主要:将这段代码从使用标准引用更改为右值引用的编码人员可能认为移动语义在这种情况下是最好的。我可以理解,虽然赋值只涉及复制指针值,这不是很多工作。 如果它们合适,我将如何正确使用此代码的右值引用?

  2. 次要:(仅限好奇心。)2007 年和 2010 年的编译器对这段代码做了什么?它是否被视为对参考的参考?这两个&运算符是否合并并成为一个单一的参考?既然它可能是无效的语法,但它编译并运行良好,它到底在做什么?

0 投票
1 回答
1956 浏览

c++builder - 断言失败:xdrPtr && xdrPtr == *xdrLPP,文件 xx.cpp,第 2349 行

使用 C++ Builder 2010 构建系统,运行大约 20 小时后,它开始触发断言失败。

断言失败:xdrPtr && xdrPtr == *xdrLPP,文件 xx.cpp,第 2349 行

疯狂地尝试谷歌,但信息不多。有些人似乎将xx.cpp中的一堆不同断言引用到 C++ Builder 中异常处理的缺点。但是我在文件中没有找到任何引用此特定行的内容。

我们已经集成了 madExcept,它似乎在某个地方捕获了内存不足异常,但不确定它是否已连接。无论什么断言触发似乎都不正确。

编辑: 我发现了一个 if 语句的实例,它作为它的语句的一部分使用了一个可能引发异常的函数。我想知道这是否可能是导致异常处理流程混乱的罪魁祸首?

考虑

包裹在 try catch 块中。如果从 foo() 中抛出异常,因此这里没有返回 int,if 语句将如何反应?我认为它仍然可能会尝试完成该行的执行,并且这将对函数的返回执行 if 检查,因为没有返回 int 。这是明确定义的还是未定义的行为?不会

更好(或者我应该说更安全)?

编辑2:

我只是设法在我的开发机器上获得断言(应用程序只是处于空闲状态),没有任何关于内存弹出和应用程序仅消耗大约 100 mb 的异常。所以他们可能没有联系。

会试着看看我是否能再次抓住它,看看它在哪里呕吐。

编辑3:

设法抓住它。首先是一个断言失败通知,就像解释的那样。然后调试器向我显示此异常通知。

调试器异常通知

如果我打破它带我到这里的代码

代码中断

它实际上突出显示了之后的第一行代码

但似乎我可以将其更改为任何内容,并且该行仍然突出显示。所以我的猜测是错误出现在它上面的代码中。我看到更多关于人们在 RAD Studio 中使用数据库时遇到这种类型的断言失败的报告......嗯。

更新:

我找到了一个线程,如果它无法访问数据库服务器,它会递归调用它自己的Execute函数。我认为这至少是问题的一部分。这将继续尝试,随着越来越多的工作线程产生并继续尝试,它只会以灾难告终。

0 投票
1 回答
1688 浏览

c++ - 创建键值对 Borland C++

我正在尝试在 Borland 2010 C++ 中创建一些字典。

我收到错误:[BCC32 错误] Generics.collections.hpp(542): E2347 属性项的读取访问说明符中的参数不匹配

我做错了什么?

0 投票
1 回答
190 浏览

c++builder - 添加 VCLFixPack.pas 时的各种链接问题

在我的项目中添加VCLFixPack.pas(截至 2013 年 9 月 27 日的最新版本)时,我遇到了其中一些奇怪的链接错误。有些编译得很好,但对于一些它抱怨链接时找不到TYPES.OBJDBGRIDS.OBJ等。

知道问题是什么吗?

VCLFixPack 在这里

http://andy.jgknet.de/blog/