[QPlugins] 使用 QPlugins 的通知机制

首先,我们要知道 QPlugins 的通知机制使用了订阅发布模式。一个通知或叫主题有两个重要的属性: 名称(Name) 名称是通知类型的名字,必需在整个插件系统中保证唯一,同名的被认为是一个类型的通知。当跨进程通信时,是靠名称而不是 ID 来唯一区分通知。 编号(ID) 一个进程唯一的编号(为什么是进程唯一,这个问题好

[QPlugins] 常见问题答问

1、QPlugins 是什么? QPlugins 是一个插件管理引擎,它基于 Delphi 编写,支持各种语言做为宿主和插件。虽然是一个插件引擎,但 QPlugins 更想强调的是服务的概念,而不是插件。插件在 QPlugins 里只是各种服务的容器,各种服务才是 QPlugins 想要整合的主体。QPlugins 的

VCL DLL 中如何解决 Tab 键不好使的问题?

QPlugins 支持 DLL 插件,但是,插件中的窗体如果要嵌入主窗体的某个控件上,往往会发生一些奇怪的事情,百度 Delphi DLL Form 大约可以搜索到 860,000 个结果,大家给出的解决方案千奇百怪。本文提供的解决方法反而可能是最简单的了。 首先声明一下,这个不是最完美的解决方案,QPlugins 里

[QPlugins] 如何编写基于 QPlugins 的插件程序

QPlugins 插件引擎目前正在开发过程中,目前已经可以编写基于 QPlugins 的插件了。QPlugins 中每个插件提供一到多种服务,这些服务被注册到全局的 PluginsManager 实例中,这个实例在所有的插件中都是可以直接访问的。 PluginsManager 将服务划分为三类: 1、加载器(Loade

QDB、QString、QValue、QPlugins 更新说明

【更新内容】 * 修正了QDB、QPlugins 在 2007 无法编译的问题 + QString 增加 StrCmpW 函数(原有增加新参数并移入 interface 部分) + QValue 修正了Bcd 类型操作符在早期版本未重载而引起的编译问题 * 其它细节修改 【更新级别】 推荐 【特别感谢】 麦子仲肥、勇哥

[教程] C++ 的程序结构

1、函数 函数是人为的将一段具有某一功能的代码按特定的格式组织在一起,以便在程序的其它地方随时调用的一块代码的实体。在 C/C++ 中,它的格式为: [修饰符] 返回值类型 [修饰符] 函数名([参数列表])[修饰符] { [函数实现] } 初学时,我们暂时先不考虑各种修饰符,只关系核心的部分: 返回值类型:用于给调用

[QDB] 一个新的原生二进制转换器,生成文件的体积最小

QDB 新实现了一个 TQBinaryConverter 做为原生的二进制格式,它的源码位于 qconverter_stds.pas 里,相比 MsgPack、Json 及 FireDAC  的二进制格式,其体积也更小,速度也更快。同样 10 万条记录,下面是几种格式的保存结果对比(均未压缩): TQBinaryCon

[教程] 一个程序的基本逻辑

首先,什么是程序? 程序实际上是一堆命令和逻辑判断的组合,就象我们说话,只是词汇和逻辑判断的组合一样。我们人说话最基本的是拼音,然后不同的读音的字符拼在一起,形成逻辑上合理的一句话。而计算机最基本的部分被称为关键词,然后将这些关键词拼在一起,形成逻辑上合理的一句命令操作。我们来看看基本的关键词: 交付 我们生活中将一个

[QDigest] 更新 : 修正了 MD5Hash(AStream,nil) 堆栈溢出的问题

【问题描述】 该问题是由于 MD5Hash 函数被映射到匿名函数版本,而匿名函数版本自己却使用了 MD5Hash(AStream,nil) 去试图调用非匿名函数版本,但却仍被映射到了匿名函数版本造成的。 【更新级别】 推荐 【严重程度】 高 【特别感谢】 青春

[QString] 更新: HashOf 的算法更新为 BKDR

【更新说明】 关于 BKDR 算法本身,请自行百度。算法本身效率不是特别高,但效果相对不错,QString 在 Windows 平台下,使用汇编来提升效率(性能翻倍),而在其它平台,则使用纯 Pascal 实现。 提醒大家注意,没有真正完美通用的哈希算法,哈希的目的只是将内容尽可能的平均分布,有些数据本身就有这样的特性

[QLog] – 增加了按天分割文件日志的功能

【更新说明】 按文件记录日志时,通过 SetDefaultLogFile 函数可以设置为按天生成日志,也就是说,一旦日志日期切换为第二天,就会将旧的日志文件保存为独立的文件,从而方便查阅。 SetDefaultLogFile 又以下几个参数,分别对日志文件的生成方式和文件名进行限制:   AFileName

[QWorker] 使用QWorker的延迟功能快速断掉一个无效的TCP连接

TCP 协议经历了漫长的时间发展到现在,其连接到一个地址时,如果对方地址不存在而且没有 ICMP 协议返回目标不可达消息时,连接就会漫长的等待重试失败。这显然在网络带宽比 TCP 协议产生时高出不知道 N 倍的今天,是一个没有意义的等待,而当我们想要控制这个连接时间,我们会发现我们竟然无从下手(至少我不知道,也许你知道