问题标签 [c++builder-10.1-berlin]
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.
dom - Embarcadero C++ 10.1 x64 中的 Try-catch 问题
我在执行 64 位版本的程序时遇到问题:
在32 位版本中,当 _filePath 不存在时,程序进入 catch 块,但在64 位版本中则不存在。实际上,它会抛出 EDOMParseError 几次,并且在我为每个错误对话框按 continue 后进入 catch 块。
TBasicXML 类构造函数是:
为了避免这种行为,我是否需要在 Win 64 目标的项目选项中特别指定某些东西,以防止这种行为?
编辑:我专注于这部分代码(解析器),因为它是在程序启动时执行的。但是,在解析器调用之前,我在主窗体的构造函数中添加了这种代码和平:
我已经构建了 64 位发布版本并启动了程序(无需调试器运行)。它只是在没有任何消息的情况下中止。当使用调试器(运行(F9))启动相同的程序(发布)时,它会显示错误消息对话框(EConverterError),然后在按下继续后它会显示我的 MessageDlg。
注意:32位版本完全没有问题。
Edit2:我测试了其他一些项目,情况相同:
同样,64 位发行版,当从 IDE 启动时,没有调试器,静默终止程序,当使用调试器启动时,正常工作。
Edit3:现在,这是一个谜?在上面的示例中,我从构建中排除了 DLL 库 (spEngine.a),并注释了与 DLL 条目调用相关的所有代码,并且 try-catch 块照常工作。当包含 spEngine.a 时,无论 DLL 加载 (spEngine.dll) 是否延迟,也没有对 DLL 条目的任何调用,try-catch 块如前所述。很奇怪。spEngine.dll 使用 MVSC2017 调用自定义 Intel 的 ipp DLL 构建。我在另一个调用 OpenCV DLL(使用 MSVC2017 构建的包装器)的库中遇到了类似的 try-catch 行为。完整的源代码在这里:https ://github.com/spetric/Lips
注意:64 位主机应用程序运行良好,功能没有问题,只有奇怪的 try-catch 块行为。
vcl-styles - VCL 样式影响非 VCL 窗口
我对 Embarcadero C++ Berlin 10.1 中的 VCL 样式有疑问。我有一个用 BCB C++ 编写的应用程序,它调用 pspiHost.dll(用 VS 2017 编写),它执行 Photoshop 8bf 插件过滤器(https://github.com/spetric/Photoshop-Plugin-Host)。
一切正常,直到我将项目应用程序外观更改为某种 VCL 样式。当从样式化的应用程序调用插件时,它的窗口也被样式化了!?此外,插件窗口会不断重新绘制,窗口中的任何操作(如平移图像)都会减慢。
我还注意到一个扫描仪预览对话框上的这种奇怪行为,该对话框也有样式,它绝对不是 VCL 应用程序。
如何禁用从 DLL 调用的非 VCL 窗口的 VCL 样式?
以下是炭黑板岩风格的示例:
请忽略图像方向(在校正 TBitmap 样式容器之前)。
这是没有样式的相同应用程序的示例(Windows 默认):
Styled 插件完全没用(缩放、平移或任何图像更改时速度很慢)。最后一个示例是图像方向校正,但与此问题无关(仅供参考)。
这是一个简单的应用程序。一种在面板上有 TImage、一个 TPanel 和两个速度按钮的表单(“加载图像”和“执行插件”)。
这是“加载图像”按钮的 OnClick 事件:
在这个例子中,扫描线被一一“发送”到 pspiHost.dll,所以有 3 个 API 调用。
这是“执行插件”按钮的 OnClick 事件:
有两个 API 调用,加载过滤器和执行过滤器。就这样。架构非常简单:Application -> pspiHost.dll -> 8bf 过滤器(同样是 DLL)。应用程序外观影响插件窗口。问题是如何禁用这种行为?
c++builder - 链接 C++ Builder 10.1 Berlin 项目的错误消息
[ilink32 Error] Error: Unresolved external '__fastcall System::Variant::Exec(System::AutoCmd&, int) const' referenced from
当我尝试在 C++ Builder 10.1 Berlin 中使用新的 32 位编译器而不是经典编译器时,我收到了上述错误消息。这段代码使用经典编译器成功编译。
我知道可能缺少某些东西(一个库?),但是什么?
任何想法?