问题标签 [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.
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。
还有什么我应该考虑或注意的吗?
我已经找到:
- 2007年和2010年并存。我不确定我是否相信这个答案,因为我之前在同一台机器上遇到过 2006 和 2007 的问题。
- 关于 Unicode 的几个答案:用 2009 编写字符串和通用转换到 Unicode 文本,但没有一个是问题的答案,或者根本不是 C++Builder 特定的部分。
- 这个关于指南升级到 2009的问题,但尽管答案很有帮助,但它们并没有回答上述所有与 Unicode 相关的问题。
- [编辑:添加] RAD Studio 中用于 Unicode 的 Codegear 文档以及转换为 Unicode 时要查找的内容
c++builder-2010 - 如何传输缓冲区?TTCpServer/TTcpClient
我正在编写一个程序来将文件从一台 PC 发送到另一台 PC。我正在尝试使用 发送它char* buffer
,但我遇到了一些问题。我认为它发送缓冲区,但结果是一个大小为 0 KB 的文件。我怀疑我没有将缓冲区写入文件,但我真的不确定。我的缓冲区数据来自 *bmp 文件。我确实在几乎同一件事上找到了另一个问题,但我真的需要更多解释。
我正在使用 C++ Builder 2010,很难找到任何教程。它具有可能有用的各种组件和功能。
编码:
客户端:
服务器:
c++builder - TCP 套接字异常断开和写入超时
我会尽量用最短的语言来解释这个问题。我正在使用 c++ builder 2010。
我正在使用 TIdTCPServer 并将语音数据包发送到连接的客户端列表。一切正常,直到任何客户端异常断开连接,例如电源故障等。我可以通过切断连接客户端的以太网连接来重现类似的断开连接。
所以现在我们有一个断开连接的套接字,但你知道它在服务器端还没有检测到,所以服务器也会继续尝试向那个客户端发送数据。
但是,当服务器尝试向断开连接的客户端写入数据时……Write() 或 WriteLn() 在尝试写入时挂起,就像在等待某种写入超时。这会挂起空洞数据包分发过程,从而在向所有其他客户端的数据传输中产生延迟。几秒钟后,“套接字连接已关闭”异常被引发并且数据流继续。
这是代码
好的,我已经有一个保持活动机制,可以在 n 秒不活动后断开套接字。但是你可以想象,这个机制仍然不能与这个广播循环完全同步,因为这个广播循环几乎一直在运行。
那么我可以通过 iohandler 或其他方式指定任何写入超时吗?我已经看到很多关于“检测断开的 tcp 套接字”的线程,但我的问题略有不同,我需要在写入尝试期间避免挂断几秒钟。
那么有什么解决办法吗?
或者我应该考虑对这种数据广播使用一些不同的机制,例如广播循环将数据包放在某种 FIFO 缓冲区中,客户端线程不断检查可用数据并挑选并将其传递给自己?这样,如果一个线程挂起,它将不会停止/延迟整个分发线程。
请问有什么想法吗?感谢您的时间和帮助。
问候
果酱
c++builder - 迷失在这个 c++ Builder 2010 堆栈跟踪中
我在 C++ Builder 2010 项目中低于 EAccessViolation 异常。
StackTrace 没有在其中显示我的任何项目文件。如何找到错误的位置?此应用程序使用 TIdTCPServer 组件。
c++builder - C++Builder 2010 Professional 中的 UML 建模
我想在 C++Builder 2010 的 Pro 版中做一些基本的类图 UML 模型。Embarcadero 有一个C++Builder 特性矩阵文档,其中一行写着“UML 代码可视化 – 随时,获取您的源代码的 UML 模型视图”并在该表的“专业”列中进行了检查——我认为这意味着它应该可供我使用。
然而,当我打开一个现有项目并执行 View | 模型视图,模型视图窗口中没有任何内容。我能找到的唯一图表位于 C++ 类资源管理器的 Graph 选项卡上。我自己不会称它为 UML 图——这就是 Embarcadero 所指的吗?
编辑:我发现 Pro 确实有建模支持;不知何故,它在我打开的项目中被关闭了。我向项目组添加了另一个项目,然后当我单击“模型视图”选项卡时,IDE 提供了打开建模支持的功能。然后我可以向该项目添加一个类图,尽管我仍在寻找一种将项目的现有对象导入图表的方法。
rtti - TRttiMethod::调用使用
我想知道如何在 C++Builder 2010 中使用 TRttiMethod 类的 Invoke 方法。
这是我的代码
Show 没有参数,它是 __published。当我执行时,我收到带有消息“参数计数不匹配”的 EInvocationError。
有人可以演示 Invoke 的使用吗?被调用方法中没有参数和有参数。
谢谢
何塞普
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。使用前三个中的任何一个,我都可以访问方法并初始化平台接口。
但是,当尝试任何相同的策略来访问任何其他接口时,例如IUccContext、IUccUriManager或IUccUri,所有这些接口都在 _tlb.h 文件中定义了一个 clsid,我要么在前两个中得到一个“类未注册”错误情况下,或在第三种情况下 hresult 失败。这让我想到了下一个问题。
- 使用 ole-viewer,所有接口都按应有的方式注册。为什么注册dll时不会注册dll中的所有可共同创建的类?他们为什么不采取类似行动的原因可能是什么?
来自 UCCAPILib_tlb.h 的 Edit1:
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 派生的对象有其自身的局限性。
感谢您的输入!
c++ - GetFileSizeEx 损坏文件句柄
目前,我正在使用 GetFileSizeEx 来跟踪日志文件在写入之前的大小。我们的空间有限,如果我们尝试创建大于 100 兆字节的文件,我们将停止记录数据。问题是由于某种原因 GetFileSizeEx 会损坏我正在使用的文件句柄。
hFileHandle 将从正常值 (00000EB8) 变为 ???? 在 Rad 工作室的调试器中。
现在我通过使用 GetFileSize 函数解决了这个问题:
但是,我宁愿不使用非扩展功能。我已删除该文件以确保没有其他进程对其进行锁定,但在创建文件时仍然存在问题。我应该注意到这个错误不会在 builder 6 下发生,只有 Rad Studio 2010。
感谢您的帮助。
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
我该如何解决这个问题?