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

0 投票
1 回答
2526 浏览

delphi - 在 LoadLibrary 中动态加载 BPL 失败

我想在 Delphi 10 Seattle(更新 1)或 Delphi 10.1 Berlin 项目(企业版)中动态加载 BPL 模块。但是LoadPackage函数失败并显示消息(在 32 位和 64 位目标平台上):


项目 LoadPackageTest.exe 引发异常类 EPackageError,并带有消息“无法加载包“此处的真实路径”\TestBplPackage.bpl。指定的模块无法找到'。


我的开发平台是 Windows 10 Pro 64 位。

我确信传递的文件名是正确的(它包含完整路径)。到目前为止我所做的:

  • 如果使用 Delphi 2007 Enterprise 编译 - 在同一台 Win 10 PC 上,相同的项目组可以正常工作(我不得不从头开始重新创建它)

  • 如果我加载标准 .DLL - 它已正确加载,我可以调用 D2007、D10 和 D10.1 中的函数(适用于 D10 和 D10.1 上的 32 位和 64 位目标)。

实际上 LoadPackage 调用 SafeLoadLibrary,后者调用 LoadLibrary(所有这些过程都在 System.SysUtils 中。

我编译了带有和不带有运行时包的测试可执行文件有代码:

DLL 项目 (TestDLL.dpr),适用于所有情况

BPL 项目 (TestBplPackage.dpr)


测试应用程序 - LoadPackageTest.dpr

Form1:TForm 包含 dOpen:TOpenDialog 和一个 Button1:TButton

有没有人尝试过类似的东西?

避免从项目管理器树的“包含”节点中删除单元 - Delphi 10 和 10.1 都崩溃...


编辑 1:它适用于某些条件

感谢大卫的回答,我设法取得了一些进展:
当相关
C:\Program Files (x86)\Embarcadero\Studio\18.0\Redist\
Win32Win64子文件夹的内容位于应用程序和测试 BPL 位于相关的System32SysWOW64文件夹中。

如果没有上述内容,我无法使其工作,尽管
C:\Program Files (x86)\Embarcadero\Studio\18.0\bin
C:\Program Files (x86)\Embarcadero\Studio\18.0\bin64 位于 %PATH% 环境变量中。它没有找到RTL包。


如果应用程序依赖 %PATH% 变量来查找必要的 BPL,则很容易解释副作用。因为我在 %PATH% 变量中有 C:\Windows\SysWOW64;C:\WINDOWS\system32;C:\WINDOWS
,如果我使用运行时包为 Win32 平台编译,我会收到以下错误消息:
应用程序无法正确启动 (0xc000007b)
这是因为 32 位应用程序尝试加载 64 位 BPL。

我可以轻松交换 System32 和 SysWOW64 的位置,但这是全局变量,而不是用户路径变量,需要重新启动才能使更改生效。
我将继续试验,但到目前为止,唯一 100% 可行的解决方案是将使用过的“标准”BPL 保存到平台输出文件夹中。

0 投票
1 回答
758 浏览

delphi - Delphi 10.1 Berlin 中软件包的库文件夹

看来我不明白我应该如何在 Delphi 中配置库文件夹。

我创建了一个包,将它安装在 IDE 中,我可以将它放在一个表单中,然后项目编译。然后,我执行并得到一个异常,说我在包的一个单元中使用的类之一找不到。

这怎么可能?我可以看到包的 dcu 文件。

设置的文件夹是这样的:

  1. 在库路径中,我有 .pas 文件的文件夹(源)

  2. .bpl 文件存在于 $(BDSCOMMONDIR)\Bpl 目录中

  3. .dcu 文件存在,我已在调试 dcu 路径中添加了文件夹

它是一个可视组件(因为我可以将它放在一个表单中)并且豁免是由一个类(非可视)引起的
。确切的错误消息是:

项目提出 ClassNotFound 并带有消息 'class tTopBarontrol' not found"

更新:我已经完全删除了导致错误的类并删除了所有文件。然后重建组件并再次安装它,由于某些原因,我仍然得到具有相同类名的相同异常。

看起来有些东西卡在编译器和这个组件中。

0 投票
1 回答
567 浏览

ios - Delphi Berlin EObjectiveC 与消息'ObjectiveC 类 CTCallCenter 找不到

我正在使用 Delphi 10.1 Berlin

只需在 IOS 电话
Embarcadero\Studio\18.0\Samples\Object Pascal\Mobile Snippets\PhoneDialer上运行 PhoneDialer 示例

如果我在调试模式下运行,应用程序在启动时崩溃我收到此错误


调试器异常通知

Project PhoneDialer 引发异常类 EObjectiveC,并带有消息“找不到 ObjectiveC 类 CTCallCenter”。


看起来它发生在
FMX.PhoneDialer.iOS单元中

有没有人有什么建议?
如果您可以让示例工作,您是否可以包含实现它所需的代码:)

作为旁注 - 运行相同样本的 Delphi 10.0 Seattle 似乎工作正常

0 投票
0 回答
1024 浏览

android - 如何以 Android 为目标在 rad 10 Berlin 中运行多设备应用程序?

我正在尝试在 RAD Studio 10.1 Berlin 中运行多设备应用程序。下面是我的目标平台的样子:

图片

我尝试通过在“项目>选项>配置”中创建一个密钥库文件(我希望这是这样做的方法)来签署应用程序。

我希望应用程序在模拟器中运行,而不是在连接的 Android 设备中。有没有我错过的具体步骤?

0 投票
1 回答
61 浏览

sql - Delphi 中的 SQLQuery 脚本查找特定日期

在运行语句之前如何在 Delphi 中准备查询?

我有一个来自 GUI 控件的值,用于过滤数据。

0 投票
1 回答
198 浏览

delphi - 如何从 TCustomEdit 替换已删除的受保护虚拟 DoTyping 方法?

我有一个自定义 FMX 组合框控件,我正在尝试从 Delphi XE6 移动到 Delphi 10.1 Berlin。该控件继承自 TComboEdit。在我的控制下,我覆盖了受保护的虚拟方法 - “DoTyping”,它曾经存在于 TCustomEdit 中,但在 Delphi 10.1 Berlin 中不再存在。如何在不重写整个控件的情况下保留我的代码?Delphi 10.1 Berlin 中是否有我正在监督的同义词?

看起来好像 TCustomEdit 添加了一个新属性

0 投票
1 回答
1192 浏览

delphi - Delphi 10 Seattle 和 10.1 Berlin 无法调试 COM DLL

我有一个 COM DLL 项目,我可以在 Delphi 2007 和 XE8 中调试它(在断点处停止)。

但是,IDE 似乎不可能在 Delphi 10 Seattle 或 10.1 Berlin 的断点处停止。

我的调试步骤:

  1. 更改为 DEBUG(并检查是否勾选了那些调试选项。例如调试信息)

  2. regsvr32 输出目录下的项目DLL

  3. 编写一个简单地创建 COM 对象并调用其方法的 vbscript

  4. 在调试器中,设置用于 32 位或64 位调试的Run命令行c:\windows\syswow64\cscript.exec:\windows\system32\cscript.exe

  5. 设置命令行参数以运行 vbscript。

  6. 在调用的方法处设置断点。

  7. 按 F9

预期:在断点处停止

在 Delphi 2007 和 XE8 中,一切都很好,但我无法在 Delphi 西雅图或柏林做到这一点。

这里可能出现什么问题?为了在 Delphi 的最新 IDE 版本下调试 COM DLL,我需要启用/禁用任何设置吗?

0 投票
1 回答
1489 浏览

delphi - FireDac 冻结 GUI

我在 Delphi 10.1 Berlin 下使用 FireDac。

为了向用户显示数据,我使用 TDBEdit 等数据感知控件。

我使用 TFDQuery 和 TDataSource 将它们与控件链接起来。

这可行,但需要一些时间才能执行的长 sql 查询会冻结 GUI。

我想知道如何在执行那些长时间运行的查询时阻止 gui 冻结。

我在考虑后台线程。

在 wiki 上,我读到 FireDac 可以使用多线程: http://docwiki.embarcadero.com/RADStudio/XE6/en/Multithreading_(FireDAC)

然而,在 embarcadero 社区论坛线程Jeff Overcash 中写道:

我没有看到询问或 Dmitry 提到的一件事是,您不能针对后台线程查询使用 TDataSource 或 LiveBindings。如果您在后台处理显示结果的查询,您应该断开 LB 或 DataSource,打开并获取所有数据,然后重新建立连接。

这两个将尝试将光标移动到您身上或查询缓冲区以进行显示,而缓冲区非常不稳定,正在不同的线程中移动。

我想知道是否有人也使用 FireDac 并在表单上显示值可以帮助我。

0 投票
0 回答
719 浏览

delphi - 为什么全局原子表中存在与模块名相同的字符串时Firemonkey不创建应用程序句柄

情况:全局原子表中有一个字符串与我的应用程序相同。我的应用程序没有创建应用程序句柄,我得到一个无效的窗口句柄。

FMX.Platform.Win 中的代码

我有一个旧应用程序,其中 exe 具有相同的名称。关闭后,它会在 globalatomtable 'COM' 中留下一个字符串。关闭这个旧应用程序后。我无法再打开新应用程序,因为它一直在 gloabal atom 表中找到这个“COM”,导致应用程序句柄和窗口句柄无效。

如果我将代码放在注释中,则应用程序将以有效的应用程序句柄完美启动。

0 投票
1 回答
344 浏览

delphi - 如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer?

如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用类助手完成了它 - 但建议的解决方案不起作用:

它失败只是因为 GetMethod 返回 NIL。任何想法为什么会失败?

编辑: 我确实想知道它为什么失败