问题标签 [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 投票
4 回答
1926 浏览

delphi - 将复杂的应用程序从 C++Builder 2007 升级到 2010 需要了解什么?

我公司的主要应用程序主要是用 C++ 编写的(带有一些 Delphi 代码和组件)。我们将从 RAD Studio 2007 升级到 2010 的下一个版本,大约一周后开始。为了确保升级顺利进行,我需要了解什么?

目前我想到的几点是:

  • 统一码。这个看起来真的很复杂。我们的应用程序包含了 std::string-s 和 AnsiString-s 的可怕组合,以及它们之间的强制转换。我对此有很多问题,例如“wstring 是否能够保存 UnicodeString 可以保存的所有内容,我们是否应该只进行搜索/替换”,或者“我们是否应该完全避免所有 C++ 字符串类型并使用 UnicodeString”,“我们可以将所有事件处理程序更改为使用 String,尽管现有的.HPPs事件处理程序方法原型被编译器转换为 AnsiString”,一直到诸如“我们应该在所有字符串前面加上 L 前缀,还是编译器足够聪明并启用 Unicode 以使用Unicode 字符串”等。对此的任何见解将不胜感激。

    我们还需要向后兼容。我们的应用程序使用自己的二进制元组格式,当前将字符串存储为字节数组。我需要升级它以读取旧文件,并且大概还要编写新的 Unicode 字符串。如何处理以二进制格式嵌入的 Unicode 字符串?是否有任何通用方法可以将 UnicodeString 指向一个字节数组,这些字节最初可能写为 ANSI 字节或 Unicode,它会弄清楚它们是什么?

  • 第三方组件。我们主要使用SpTBX,它似乎是兼容的。

  • 项目升级。Codegear 论坛中的标准建议似乎是在升级时手动重新创建所有项目文件。这是一项非常大量的工作(我们的主应用程序中有 7 个项目(主要是库),外加六个 DLL,大量文件。)有什么方法可以自动执行此操作吗?

  • 链接器的外观如何?传统上,我们在链接器随机崩溃或资源耗尽时遇到了很多麻烦,尽管在 2007 年它变得更好了。这是我们的主应用程序被拆分为多个库的原因之一 - 链接器不能(希望,“不能,但现在可以“?)以其他方式处理它。

  • 我知道有一个新的类型库编辑器和格式(它存储 IDL,即文本,并动态生成 TLB?)这如何处理使用 TLB 升级现有 COM 项目?我们有内置在 C++ 应用程序中的 Delphi 代码和 TLB。

  • 还有什么我应该考虑或注意的吗?

我已经找到:

0 投票
1 回答
2300 浏览

c++builder-2010 - 如何传输缓冲区?TTCpServer/TTcpClient

我正在编写一个程序来将文件从一台 PC 发送到另一台 PC。我正在尝试使用 发送它char* buffer,但我遇到了一些问题。我认为它发送缓冲区,但结果是一个大小为 0 KB 的文件。我怀疑我没有将缓冲区写入文件,但我真的不确定。我的缓冲区数据来自 *bmp 文件。我确实在几乎同一件事上找到了另一个问题,但我真的需要更多解释。

我正在使用 C++ Builder 2010,很难找到任何教程。它具有可能有用的各种组件和功能。

编码:


客户端:

服务器:

0 投票
1 回答
1761 浏览

c++builder - TCP 套接字异常断开和写入超时

我会尽量用最短的语言来解释这个问题。我正在使用 c++ builder 2010。

我正在使用 TIdTCPServer 并将语音数据包发送到连接的客户端列表。一切正常,直到任何客户端异常断开连接,例如电源故障等。我可以通过切断连接客户端的以太网连接来重现类似的断开连接。

所以现在我们有一个断开连接的套接字,但你知道它在服务器端还没有检测到,所以服务器也会继续尝试向那个客户端发送数据。

但是,当服务器尝试向断开连接的客户端写入数据时……Write() 或 WriteLn() 在尝试写入时挂起,就像在等待某种写入超时。这会挂起空洞数据包分发过程,从而在向所有其他客户端的数据传输中产生延迟。几秒钟后,“套接字连接已关闭”异常被引发并且数据流继续。

这是代码

好的,我已经有一个保持活动机制,可以在 n 秒不活动后断开套接字。但是你可以想象,这个机制仍然不能与这个广播循环完全同步,因为这个广播循环几乎一直在运行。

那么我可以通过 iohandler 或其他方式指定任何写入超时吗?我已经看到很多关于“检测断开的 tcp 套接字”的线程,但我的问题略有不同,我需要在写入尝试期间避免挂断几秒钟。

那么有什么解决办法吗?

或者我应该考虑对这种数据广播使用一些不同的机制,例如广播循环将数据包放在某种 FIFO 缓冲区中,客户端线程不断检查可用数据并挑选并将其传递给自己?这样,如果一个线程挂起,它将不会停止/延迟整个分发线程。

请问有什么想法吗?感谢您的时间和帮助。

问候

果酱

0 投票
2 回答
663 浏览

c++builder - 迷失在这个 c++ Builder 2010 堆栈跟踪中

我在 C++ Builder 2010 项目中低于 EAccessViolation 异常。
StackTrace 没有在其中显示我的任何项目文件。如何找到错误的位置?此应用程序使用 TIdTCPServer 组件。

0 投票
1 回答
764 浏览

c++builder - C++Builder 2010 Professional 中的 UML 建模

我想在 C++Builder 2010 的 Pro 版中做一些基本的类图 UML 模型。Embarcadero 有一个C++Builder 特性矩阵文档,其中一行写着“UML 代码可视化 – 随时,获取您的源代码的 UML 模型视图”并在该表的“专业”列中进行了检查——我认为这意味着它应该可供我使用。

然而,当我打开一个现有项目并执行 View | 模型视图,模型视图窗口中没有任何内容。我能找到的唯一图表位于 C++ 类资源管理器的 Graph 选项卡上。我自己不会称它为 UML 图——这就是 Embarcadero 所指的吗?

编辑:我发现 Pro 确实有建模支持;不知何故,它在我打开的项目中被关闭了。我向项目组添加了另一个项目,然后当我单击“模型视图”选项卡时,IDE 提供了打开建模支持的功能。然后我可以向该项目添加一个类图,尽管我仍在寻找一种将项目的现有对象导入图表的方法。

0 投票
1 回答
977 浏览

rtti - TRttiMethod::调用使用

我想知道如何在 C++Builder 2010 中使用 TRttiMethod 类的 Invoke 方法。

这是我的代码

Show 没有参数,它是 __published。当我执行时,我收到带有消息“参数计数不匹配”的 EInvocationError。

有人可以演示 Invoke 的使用吗?被调用方法中没有参数和有参数。

谢谢

何塞普

0 投票
1 回答
506 浏览

c++ - 访问 uccapi.dll COM 接口 C++ 的问题

我正在从事一个涉及 Microsoft 统一通信客户端 API 的项目;uccapi.dll。我也在使用 Codegear C++Builder 2010,而不是 Visual Studio。使用 regsvr32 注册 dll 并将其作为类型库导入 C++Builder 2010 后,生成了 uccapi_tlb- 和 uccapi_ocx- 文件。将这些导入到我的新项目中后,我正在尝试遵循msdn 指南来创建能够登录到 Office 通信服务器的 Office Communicator 客户端。

在这方面,我有两个问题:

  • 访问通过 ocx 提供的 com 接口的正确方法是什么?

到目前为止,我已经找到了几种创建接入点的方法,例如。

前三个似乎运作良好。后者会给我一个 Assertion failed: intf!=0 error with 0×40000015 exception。使用前三个中的任何一个,我都可以访问方法并初始化平台接口。

但是,当尝试任何相同的策略来访问任何其他接口时,例如IUccContextIUccUriManagerIUccUri,所有这些接口都在 _tlb.h 文件中定义了一个 clsid,我要么在前两个中得到一个“类未注册”错误情况下,或在第三种情况下 hresult 失败。这让我想到了下一个问题。

  • 使用 ole-viewer,所有接口都按应有的方式注册。为什么注册dll时不会注册dll中的所有可共同创建的类?他们为什么不采取类似行动的原因可能是什么?

来自 UCCAPILib_tlb.h 的 Edit1:

0 投票
3 回答
4382 浏览

python - 我应该如何将 Python 嵌入到 C++ Builder / Delphi 2010 应用程序中?

我有兴趣尝试在我的应用程序中嵌入 Python,让用户在应用程序环境中运行 Python 脚本,访问内部(C++ 实现)对象等。我对此很陌生,所以不知道到底是什么我正在做。

我读过Embedding Python in Another Application,虽然这似乎只谈论 C API 和平面 C 函数,而不是类或对象(除非我错过了什么),而且它的“在 C++ 中嵌入 Python”部分只有两句话长. 但是,我也遇到了如何使用 boost::python,这看起来很棒。

有一个问题: C++ Builder 2010 不支持boost::python 。

因此,鉴于此,将 Python 嵌入使用 C++ Builder 2010 编译的 C++ 应用程序的最佳方法是什么,以及使用哪种技术最好,如何公开/集成类和对象以让 Python 编码器访问对象 -面向程序的内部? 我错过了标准方法吗?将内部类或实例化对象作为对象暴露给 Python 是否容易,或者 API 是真正的 C 风格还是平面/非 OO,如果是这样,通过这样的 API 模仿底层 OO 层的最佳方法是什么?

注意:我实际上使用的是 RAD Studio,它包括 C++ Builder 和 Delphi。可能可以使用某种特定于 Delphi 的绑定,但我遇到的那些是六七岁,或者是新的(Python 2.6)但似乎没有任何文档并且有问题列表中的评论,例如“任何人都读过这些 [原文如此] 评论?有人在这个项目上工作吗?”这并不令人鼓舞。但请随意包含特定于 Delphi 的答案,特别是如果您认为它们可能会在 D+CB 组合应用程序中工作。我感谢所有答案,即使它们不是很完美 - 我可以研究,我只需要关于去哪里的指针。不过,本机 C++ 解决方案可能是理想的,因为使用 VCL 派生的对象有其自身的局限性。

感谢您的输入!

0 投票
1 回答
759 浏览

c++ - GetFileSizeEx 损坏文件句柄

目前,我正在使用 GetFileSizeEx 来跟踪日志文件在写入之前的大小。我们的空间有限,如果我们尝试创建大于 100 兆字节的文件,我们将停止记录数据。问题是由于某种原因 GetFileSizeEx 会损坏我正在使用的文件句柄。

hFileHandle 将从正常值 (00000EB8) 变为 ???? 在 Rad 工作室的调试器中。

现在我通过使用 GetFileSize 函数解决了这个问题:

但是,我宁愿不使用非扩展功能。我已删除该文件以确保没有其他进程对其进行锁定,但在创建文件时仍然存在问题。我应该注意到这个错误不会在 builder 6 下发生,只有 Rad Studio 2010。

感谢您的帮助。

0 投票
1 回答
1529 浏览

compilation - 如何将 Crypto++ 集成到 C++ Builder 2010 / [ILINK32 错误]

我试图通过 C++ Builder 2010 编译以下(示例)代码:

http://swarmapps.wordpress.com/2009/11/24/a-simplification-wrapper-for-the-crypto-library/

http://pastebin.com/f6bd13d59/example.cpp

( http://pastebin.com/f2fc53f83/BasicCryptoPPWrap.h )

没有编译器错误,但链接失败:

[ILINK32 错误] 错误:未解析的外部 'CryptoPP::SimpleKeyingInterface::SetKey(const unsigned char *, unsigned int, CryptoPP::NameValuePairs&)' 引用自 E:\TEST\DEBUG\FILE1.OBJ

我该如何解决这个问题?