问题标签 [c++builder-2009]
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.
dll - TPageControl 内容不会在 DLL 中更新
在 C++ Builder 2009 中,我有将子类导出TFrame
到我的 EXE 主程序的 DLL。子类中有一个TPageControl
对象TFrame
。当TFrame
加载到 EXE 并显示在 上时TForm
,无论我是否更改了 的选项卡TPageControl
,其内容都TPageControl
保持不变,但活动选项卡会更新。
TPageControl
直接在EXE主程序中使用,从来没有遇到过这种问题。它与 DLL 和 VCL 限制有关吗?
c++ - 没有缓冲区大小的 vswprintf() 在小缓冲区而不是 EOF 上崩溃。如何传递缓冲区大小
使用 Borland C++ Builder 2009
我根据 RAD Studio 的帮助 (F1) 使用 vswprintf:
到目前为止,我总是提供一个很大的缓冲区wchar_t OutputStr[1000]
并且从未遇到任何问题。作为一个测试并想做一个改进动作,我尝试了一个小缓冲区wchar_t OutputStr[12]
,并注意到程序完全崩溃了。甚至try{}catch(...){}
没有抓住它。Codeguard 报告memcpy()
失败,这似乎是内部实现。我原本期望一个EOF
as 作为返回值。
在线搜索时,vswprintf
我发现 c++ 变体将缓冲区大小作为输入,但我似乎无法说服我的编译器使用该变体?知道如何使用 BCB2009 强制它吗?
练习的全部目的是实现一个回退方案,当缓冲区在可能的一两个异常情况下太小时,这样我就可以为函数分配更多内存并重试。但这种机制似乎根本不起作用。
不确定如何最好地测试所需的字节/字符的确切数量?
bpl - 如何将“vcl.bpi”添加到 BPL 项目
我使用 C++ builder 2009 创建一个 BPL 项目。“ Requires ”列表默认具有“ rtl.bpi ”。我将一些 VCL 表单添加到“包含”列表并尝试构建 BPL 项目。由于链接器错误,例如“ Unresolved external 'Forms::TForm::' referenced from XXX.OBJ ”,构建失败。很明显,我应该将“ vcl.bpi ”添加到“ Requires ”列表中。我执行以下步骤:
- 右键单击“ Requires ”并选择“ Add Reference ”。
- 在“添加”对话框-->“需要”选项卡中,在“包名称”文本编辑中键入“vcl.bpi” ,然后单击“确定”。
- 它会弹出一个错误对话框,显示“未找到文件 vcl.bpi ”。
我应该如何手动添加“vcl.bpi”?
plugins - 如何仅部署 .EXE 和自定义 .BPL 文件?
我想用插件开发 GUI 应用程序。插件包含从 Plugin-Core 库中的 Base Forms 继承的 VCL Forms。主应用程序可以选择动态加载哪个插件,然后显示哪些 Form 子类。
在用户方面,我想部署 main .EXE、插件核心库和许多针对不同模型的插件库。我可以向用户发布新的或修改现有的插件库,以在不修改主.EXE和 Plugin-Core 库的情况下为新设备显示新表单。
我开发的第一个版本使用 DLL 方法,即 Plugin-Core 库和插件都是 DLL 形式。在用户方面一切都很好。但是,在开发人员方面,如果没有在 Plugin-Core DLL 项目中定义的 Base Forms,则无法链接插件 DLL 项目。这意味着Base Forms实际上是静态链接在每个插件DLL项目中的,如果有一天我修改了Base Forms并重新构建Plugin-Core DLL项目,我必须重新构建所有插件DLL项目并重新发布插件.DLL用户,也是。
在StackOverflow中搜索和询问后,我意识到VCL Forms不能跨DLL边界继承的限制是由于RTTI冲突(?)。建议的解决方案是将库从 DLL 修改为 BPL 形式,这是我开发的第二个版本。除了以下两个之外,一切都很好:
从插件 BPL 动态加载的表单与Windows 任务栏中的主.EXE是分开的。这不是我想要的。解决方案是我在.EXE项目中启用了“使用运行时包构建” 。
在.EXE项目中启用“使用运行时包构建”后,我必须向用户发布其他 .BPL,例如vcl.bpl和rtl.bpl。这不是我想要的。
我想知道以上两个问题可以同时解决吗?在我看来,如果我可以解决这两个问题:
- 在.EXE项目中禁用“使用运行时包构建” 。
- 在所有.BPL项目中启用“使用运行时包构建” 。
这样,.EXE可以在没有捆绑vcl.bpl和rtl.bpl的情况下运行,并且插件.BPL可以成功加载,因为依赖单元已经是主.EXE的一部分?我对么?但是,所有.BPL项目选项中都禁用了“使用运行时包构建”复选框。结果,我没有机会检查解决方案是否有效。对于冗长的描述,我很抱歉,由于公司的互联网安全政策,我无法附上图片。
c++ - 在 C++Builder 2009 中将字符串转换为 TDateTime
我尝试将特定格式的字符串转换为TDateTime
使用 C++Builder 2009:
转换dt
没问题,但转换dt2
抛出异常:
''2017.17.10 13:24:33'' 不是有效的日期和时间
delphi - AllowMultiSelect 的 TSaveDialog 选项在 W10 系统上无法正常工作
我有一个使用 C++ Builder 2009 构建的旧应用程序,很长一段时间都没有受到影响,它仍然可以正常工作。也就是说.. 今天我注意到一些TSaveDialog->Options
在我的 Windows 10 系统上无法正常工作。为了确保我不是在做梦,我在较旧的 Windows 版本(我尝试过 XP)上测试了相同的应用程序,并且它按预期工作得非常好。
该TSaveDialog
实例是在设计时设置的Options
: [ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing]
我今天注意到(在 Windows 10 上)ofAllowMultiSelect
不再起作用了?而是ofOverwritePrompt
(错误地)使用!换句话说,我不能再选择两个或更多文件,当我选择一个已经存在的文件时,我首先会看到一个“确认另存为”对话框。
当我在我的 Windows 10 系统上使用 C++ Builder 2009 以调试模式和检查再次编译时,调试Options
器似乎(仍然)正确地看到ofHideReadOnly
, ofAllowMultiSelect
, ofEnableSizing
,但问题仍然存在。所以这不是好像价值观以某种方式改变了?
当我在运行时尝试时:
问题也依然存在!
当我删除ofAllowMultiSelect
(在运行时或设计时)时,现有文件上不再显示“确认另存为”(但我显然仍然无法选择多个文件)。
老实说,我对此感到震惊?不知道下一步该怎么做 ?我没有选择测试更新的 c++ 版本,但我也很难理解编译器如何在这里负责。
任何指导表示赞赏。
由于 C++ Builder 和 Delphi 之间的 VCL 重叠而添加了 Delphi 标记