[FMX]在 QPlugins 中 VCL 宿主使用 FMX DLL 需要手动处理的问题说明

由于众所周知的原因,FMX 的 DLL 在 FreeLibrary 时,会出现 AV 异常,这实际上包含了两方面的原因:  FreeLibrary 时,未正确清理内部的计时器,造成 FreeLibrary 后,内部的计时器到指定的时间点后仍然运行,结果就出现了 AV 错误。  GDI+ 初始化和清理只能在宿主程序中执行

[FMX]FMX 编写 Windows 平台下 DLL 需要解决的两个问题小结

1、在 FMX.Platform.Win 中,平台退出时,没有正确释放 FApplicationHWND 窗口,这样子造成模块释放后,窗口依然存在,所以这个需要修改 FMX.Platform.Win 的代码,以修正这一问题; 2、在 FMX.Forms.Win 中, 平台退出时,没有正确释放 FTimerActionH

[QPlugins] DLL 中插件提供窗口服务指南

QPlugins 为了简化大家开发带有窗体的插件,提供了 IQFormService 接口的封装实现。要使用该接口,需要按以下步骤执行: 【宿主程序】 1、如果宿主程序是 VCL 程序,在某个模块的 uses 小节,加入 qplugins.vcl.messages 单元,以便引入对 Windows 消息的扩展支持服务;

获取动态链接库在进程中的加载地址

我们知道,Windows下DLL被加载到进程中时,可能发生地址冲突而被重定位,那么我们如何获取这些进程的重定位地址呢?实际上很简单,通过GetModuleHandle函数可以获取到已经被加载到内存中的DLL映像的句柄,这个句柄的值就是DLL被加载的映像基准地址。要列举出所有的模块映像加载地址,用EnumProcessM

Delphi调用C语言接口的几点小提示

1、对方给你DLL可能未声明正确的调用方式。一般来说接口都是stdcall或cdecl两种形式的,当然COM时有safecall,但COM对象一般直接导入,不需要自己手写,所以没啥问题。 2、将C语言的char/char *转换到Delphi时,一定要注意它对应的类型不能简单的理解为PChar,因为PChar的定义是有

线程正确的退出等待方式

一个线程如果退出时,我们习惯写下如下代码:

但在DLL中调用会在WaitFor的地方出现死等的现象,线程无法退出。 改为下面的代码可以解决:

对于Delphi早期版本,TThread的Fi