自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (2)
  • 收藏
  • 关注

原创 libharu4delphi下内嵌Unicode字体显示中文

字体使用Android自带库NotoSansCJK-Regular.ttf,这需要使用FontCreate工具把otf格式转换为ttfvar pdf : THPDF_Doc; font, font1, font2 : THPDF_Font; page : THPDF_Page; fontname : PAnsiC...

2020-04-07 10:32:14 1022 1

原创 WIN7安装NET4.6/4.7/4.8 时间戳签名和或证书无法验证或已损坏

最近遇到怪异的事情,同一个dotnet安装包,在一台win7可以正常安装,另一台上就报:时间戳签名和或证书无法验证或已损坏。网络上介绍的什么导入证书,打这个那个补丁都试了(补丁也安装不了),无果。经过研究发现问题还是出在系统的根证书上,从一台正常的机器上打开:开始——运行:certmgr.msc,把所有根证书导出到一个文件:microsoft.sst。然后有问题的机器上,删除所有根证书,再导入microsoft.sst,重启后就可以正常安装了。

2023-05-10 13:22:45 6415

翻译 pascal程序员学Golang——Method

由于该方法是在值接收器上定义的,因此当该方法被称为方法时,将创建接收器的副本,并且接收器的副本在方法中可用。record所定义的function和procedure,strcuct和record都不可继承,go里面没有overload的概念,所以method不可重名,二者的method即插即用,不需构造函数。还有一些其他的好处,例如两个不同的方法可以在同一包中具有相同的名称,这是函数无法实现的。是的,即使这是有效的,并且无论该方法是在指针上还是在普通结构上调用,该语言都会负责将参数作为值接收器正确传递。

2023-05-08 10:45:57 133

原创 pascal程序员学Golang——Interface(2)

此方法将执行它应该执行的操作,也将实现接口:)。长期雇员的工资是总和,而对于合同雇员来说,这只是基本工资。这在相应的方法中表示,分别在23和28行。在第 59 行中,我们将一个包含两者和类型的切片传递给函数。这是在排队的情况下完成的,在39行。不得不承认,delphi的代码要冗长很多,而且用到一个开源的单元文件:ArrayHelper,才有Add方法可用。我们将编写一个简单的程序,根据员工的个人工资计算公司的总费用。我们公司有两种员工,由第 11 行和第 17 行中的。现在让我们看一下接口的实际用途。

2023-05-06 11:44:59 97

原创 pascal程序员学Golang——Interface

在 Go 中,接口是一组方法签名。当类型为接口中的所有方法提供定义时,称为实现接口。它与 OOP 世界非常相似。接口指定类型应具有的方法,类型决定如何实现这些方法。

2023-05-03 11:20:20 797

原创 pascal程序员学golang——Method

Golang是C和pascal的混血,如果你对后二者都熟悉,那么学习go的基础语法是很轻松的。Go 编程语言支持称为方法(Method)的特殊类型的函数。在方法声明语法中,存在一个“接收器”来表示函数的容器。此接收器可用于使用 “.” 运算符调用函数。例如 -

2023-05-02 11:36:37 70

原创 用pascal版本的stdio库打开二进制文件

二进制文件与结构数组非常相似,只是结构位于磁盘文件中而不是内存中的数组中。因为二进制文件中的结构在磁盘上,所以您可以创建非常大的它们的集合(仅受可用磁盘空间的限制)。请记住,C 将磁盘文件中的所有内容视为从磁盘读取到内存或从内存读取到磁盘的字节块。C 使用文件指针,但它可以指向文件中的任何字节位置。打开文件后,您可以读取结构、写入结构或查找文件中的任何结构。您可以立即跳转到文件中的任何结构,它提供与数组中一样的随机访问。打开文件时,指针指向记录 0(文件中的第一条记录)。上面的代码中出现了几个不同的选项。

2023-02-17 09:04:47 254

原创 Pascal版本的 - freopen

让我们编译并运行上面的程序,它将在 STDOUT 发送以下行,因为最初我们没有打开 stdout -创建一个用于写入的空文件。如果已存在同名文件,则删除其内容并将该文件视为新的空文件。如果文件重新打开成功,该函数返回一个指向标识流的对象的指针,否则返回空指针。如果文件不存在,则创建该文件。-- 这是指向 FILE 对象的指针,该对象标识要重新打开的流。-- 这是包含文件访问模式的字符串。打开一个文件以更新读写。-- 这是包含要打开的文件的名称的。创建一个用于读写的空文件。打开文件进行读取和追加。

2023-02-11 22:53:42 528

原创 openssl4d下的RSA加密解密

该demo演示了如何用一套公钥、私钥加密解密一个字符串。第一段是用公钥加密,然后用私钥解密。第二段是用私钥加密,公钥解密。

2022-10-24 10:26:40 187

翻译 Delphi中的数组和指针数学

在 Delphi 中,数组可以通过几种方式显式声明固定长度数组其中的符号[]允许开始和结束索引,或者您可以提供枚举类型作为索引。您通常应该从 0 开始索引范围,但如果您不能,那么下面的示例将需要偏移起始索引的值。

2022-10-06 21:51:26 1118

原创 用openssl4delphi编写一个AES-256-cbc例子

AES-256-cbc

2022-09-11 14:21:46 478

原创 delphi中的二维指针

Pointer是一个无类型指针,可以把任何有类型指针赋值给它。例如var p:pointer;pc:pchar;p:=pc;一维指针可视为是指向一个一维数组。比如说const nums:array[0..5] of byte=(1,2,3,4,5);var pb:pbyte;pb:=@nums;同理二维指针也可视为是指向一个一维数组,只是数组成员类型是一维指针。const nums:array[0..2] of pchar=('Hello','world','

2022-07-13 22:04:15 194

原创 罕见的C函数转译为delphi

int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx);这是openssl3中的bn_nist.c里面的一个函数,说实在的,真是少见!!!如何解读呢?是酱紫滴:它定义了一个函数指针(*BN_nist_mod_func(const BIGNUM *p)),该函数返.

2022-04-11 09:25:38 816

原创 openssl3中的捉迷藏宏定义

C中的宏定义语法某种程度上节省了很多代码,但过于复杂的宏,其弊病就是可读性非常糟糕,让变量和方法隐藏在宏定义中,犹如捉迷藏图画一般。例如在sm2_crpt.c中的这个宏定义ASN1_SEQUENCE(SM2_Ciphertext) = { ASN1_SIMPLE(SM2_Ciphertext, C1x, BIGNUM), ASN1_SIMPLE(SM2_Ciphertext, C1y, BIGNUM), ASN1_SIMPLE(SM2_Ciphertext, C3, A

2022-03-14 11:04:56 309

原创 delphi TMethod

program Test_Method;{$APPTYPE CONSOLE}{$R *.res}uses System.SysUtils;typeTExec = procedure of object;var _func: TMethod; Exec: TExec;procedure Test1;begin Writeln('Hell, word! This is a procedure.');end;function Test2: Boolean;b.

2022-02-17 16:18:17 1122

原创 Visual stduio 2022编译openssl 3.0

本文介绍在 64 位 Win10 上使用 Visual Studio Community 2022 编译的过程:1)到 OpenSSL 官网下载最新的文件包2)到 http://strawberryperl.com 网站下载并安装 Strawberry Perl,本文中下载的是 64 位的 。3)设置一个系统环境变量INCLUDE,添加以下文件路径4)在PATH变量中添加3个路径在本文中将编译 64 位 OpenSSL 动态库,进入命令提示符界面后,进入OpenSSL 源码所在目录,

2022-01-25 16:08:38 1613

原创 pthread4w-delphi编程示例(一)

线程基础: 线程操作包括线程的创建、终止、同步(连接、阻塞)、调度、数据管理和进程交互。 线程不维护已创建线程的列表,也不知道创建它的线程。 一个进程中的所有线程共享相同的地址空间。 同一进程中的线程共享: 进程说明 大多数数据 打开文件(描述符) 信号和信号捕捉程序 当前工作目录 用户和组 ID 每个线程都有一个独特的: 线程 ID 一组寄存器,堆栈指针 局部变量堆栈,返回地址 信号掩码 优先事项 返回值:errno 如果正常,pthrea

2022-01-20 14:27:19 403

原创 windows X64下用gcc将obj生成为exe

下载安装mingw,大概是这样的设置一个gcc的要用到的lib系统变量:将要编译的hello.asm:bits 64default relsegment .data msg db "Windows10 X64 by call _CRT_INIT: Hello world!", 0xd, 0xa, 0segment .textglobal mainextern ExitProcessextern _CRT_INITextern printfmain:

2022-01-15 21:37:17 1086

原创 Delphi XE2+ 测试Pthread异常

program Test_exception1;{$IFDEF FPC} {$MODE Delphi}//MacPas} {$assertions on}{$ENDIF}{$APPTYPE CONSOLE}{$R *.res}{$DEFINE __PTW32_MUTEX_TYPES}uses {$IFnDEF FPC} System.SysUtils, System.Win.Crtl, Winapi.Windows, {$ELSE} Sysutils, .

2022-01-15 13:44:31 273 1

原创 Delphi XE2+ 调用NASM生成的obj

; Message Box, 64 bit. V1.02MB_DEFBUTTON1 EQU 0 ; ConstantsMB_DEFBUTTON2 EQU 100hIDNO EQU 7MB_YESNO EQU 4extern MessageBoxA ; Import external symbolsextern ExitProcess .

2022-01-11 17:00:43 329

原创 struct对齐

// Total size = 12 bytes, alignment = 4 bytes (doubleword)._declspec(align(4)) struct { char a; // +0; size = 1 byte short b; // +2; size = 2 bytes char c; // +4; size = 1 byte int d; // +8; size = 4 bytes}/.

2022-01-11 13:17:22 386

原创 玩转rabbitmq-delphi(一)

介绍先决条件本教程假设 RabbitMQ 已安装并运行在标准端口(5672)上的本地主机上。如果您使用不同的主机、端口或凭据,则需要调整连接设置。RabbitMQ 是一个消息代理:它接受和转发消息。您可以将其视为邮局:当您将要投递的邮件放入邮箱时,您可以确定信件承运人最终会将邮件递送给您的收件人。在这个比喻中,RabbitMQ 是一个邮箱、一个邮局和一个信件载体。RabbitMQ 和邮局之间的主要区别在于它不处理纸张,而是接受、存储和转发二进制数据 blob消息。Rabbi..

2021-10-15 13:12:20 1063

翻译 C# 事件与 Delphi 事件的比较

C#中的事件就像在Delphi(或者我应该说 Object Pascal)中一样只是类的属性(properties)。事件是将调用委托给calling类的方法指针。事件具有三个主要部分:1. 方法指针属性(method pointer property)2. 事件的触发3. 事件处理程序(event handler)public delegate void OnSomething(object Sender, int Value);1. 方法指针属性。Delphi 和 C# 有很多标准.

2021-08-08 10:13:41 762

原创 建造者设计模式

Builder Pattern是说“使用一步一步的方法从简单的对象构建一个复杂的对象”它主要用于无法在单个步骤中创建对象的情况,例如在复杂对象的反序列化中。Builder设计模式的优势Builder Pattern的主要优点如下:它明确区分了对象的构造和表示。 它可以更好地控制施工过程。 它支持更改对象的内部表示。UML for Builder Pattern 示例构建器设计模式示例要创建构建器设计模式的简单示例,您需要遵循以下 6 个步骤。创建 IPacking.

2021-08-03 10:21:53 62

原创 原型设计模式

原型模式表示克隆现有对象而不是创建新对象,也可以根据需要进行定制。如果创建新对象的成本昂贵且资源密集,则应遵循此模式。原型模式的优势原型模式的主要优点如下:它减少了子分类的需要。 它隐藏了创建对象的复杂性。 客户端可以在不知道它将是哪种类型的对象的情况下获取新对象。 它允许您在运行时添加或删除对象。原型模式的使用在运行时实例化类时。 当创建对象的成本昂贵或复杂时。 当您希望将应用程序中的类数保持最少时。 当客户端应用程序需要不知道对象的创建和表示时。原型模式的

2021-08-03 08:59:31 62

原创 单例设计模式

单例模式说,只需“定义一个只有一个实例的类并提供对其的全局访问点”。换句话说,一个类必须确保只能创建单个实例,并且所有其他类都可以使用单个对象。单例设计模式有两种形式早期实例化:在加载时创建实例。 延迟实例化:需要时创建实例。单例设计模式的优势节省内存,因为不是在每次请求时都创建对象。只有单个实例被一次又一次地重用。单例设计模式的使用单例模式主要用于多线程和数据库应用程序。它用于日志记录、缓存、线程池、配置设置等。单例设计模式的 Uml如何创建单例设计模式?.

2021-08-01 17:14:55 85

原创 Abstract Factory Pattern Example

抽象工厂模式抽象工厂模式表示只需定义一个接口或抽象类来创建相关(或依赖)对象系列,但不指定它们的具体子类。这意味着抽象工厂让一个类返回一个类工厂。所以,这就是抽象工厂模式比工厂模式高一级的原因。抽象工厂模式也称为Kit。抽象工厂模式的优势抽象工厂模式将客户端代码与具体(实现)类隔离开来。 它简化了对象系列的交换。 它促进了对象之间的一致性。抽象工厂模式的使用当系统需要独立于其对象的创建、组合和表示方式时。 当相关对象系列必须一起使用时,则需要强制执行此约束。 当您想提供一个不显

2021-07-31 17:27:36 56

原创 Delphi XE10.x下的工厂模式

意图提供用于创建相关或依赖对象系列的接口,而无需指定它们的具体类。解释真实世界的例子要创建一个王国,我们需要具有共同主题的对象。精灵王国需要精灵国王、精灵城堡和精灵军队,而兽人王国需要兽人国王、兽人城堡和兽人军队。王国中的对象之间存在依赖关系。简单来说一个创建工厂的工厂;将单个但相关/依赖的工厂组合在一起而不指定它们的具体类的工厂。维基百科说抽象工厂模式提供了一种封装一组具有共同主题的独立工厂的方法,而无需指定它们的具体类程序示例翻译上面的王国例子。首先.

2021-07-30 16:36:36 184

翻译 高级加密标准 (AES) 和安全断言标记语言 (SAML) 的 Web 安全

拥有更安全的渠道在整个网络上传输用户信息的最佳方法下载源代码 - 1.1 MB密码学网络上的大多数问题都与安全问题以及在网络中保存和传输敏感数据有关。所以我们必须在它上面提供一个安全的系统。在网络中建立安全连接的最流行和最实用的方法是加密技术。加密技术是加密和解密数据以确保数据安全的过程。例如,在下图中,Bob 想要向 Alice 发送数据。此数据称为加密过程的消息和输入参数。然后将具有加密功能的特定密钥添加到此消息中并生成密文,即我们的加密消息,因此此消息通过网络,黑客正在等待窃取此数据。

2021-07-24 10:59:16 502

原创 Delphi XE10.x实现Android下AES/CBC/PKCS7Padding

这有两个在线的AES加密网站,加密结果是一样的。https://www.javainuse.com/aesgeneratorhttps://www.codeusingjava.com/tools/aesDelphi XE10.x调用bouncy castle库,也可以得到相同的结果,Base64编码的字符串BCklCa2IpgHiLT6k4DOELQ==unit AesUtil;interfaceuses bcprovext, System.SysUtil..

2021-07-22 19:07:08 735 2

原创 Delphi XE10.x实现Android下Https双向认证

我有一个https云服务器,在手机端的app发出请求后,获得服务端返回的内容,服务端存放了自制ca以及sever证书。const https = require('https');var fs = require('fs');var options = { key: fs.readFileSync("./myserver.key"), cert: fs.readFileSync('./myserver.crt'), ca: fs.readFileSync('./MyCARoot.crt

2021-07-19 14:36:03 887

原创 Delphi XE10.x实现Android下读取pfx证书

有一个简单的pfx证书,证书链就两个unit PKCS12Parser;interfaceuses Androidapi.JNIBridge,FMX.Dialogs, bcprovext, System.SysUtils, Androidapi.Helpers, bcpkix, //bctls, Androidapi.JNI.Java.Security, BCLibrary, java.security.spec.PKCS8Encode.

2021-07-17 17:49:28 285 1

原创 Delphi XE10.x实现Android下读取pem,der格式X509证书

证书没经过加密,直接从XCA中导出。1、首选创建一个抽象类TCertParsertypeTCertInfoTem = class private Fversion : integer; FserialNumber, Fsubject, Fissuer : JString; FstartTime, FendTime : JTime; Fsignature : JBitSet; Fal.

2021-07-16 19:10:33 424 2

翻译 如何读取 PEM 文件以获取公钥和私钥

1. 概述在公钥密码学(也称为非对称密码术)中,加密机制依赖于两个相关的密钥,一个公钥和一个私钥。公钥用于加密消息,而只有私钥的所有者才能解密消息。在本教程中,我们将了解如何从 PEM 文件中读取公钥和私钥。首先,我们将研究有关公钥密码学的一些重要概念。然后,我们将学习如何使用纯 Java 读取 PEM 文件。最后,我们将探索BouncyCastle库作为替代方法。2. 概念在开始之前,让我们先了解一些关键概念。X.509 是定义公钥证书格式的标准。因此,这种...

2021-07-13 10:04:23 22951 3

原创 Delphi XE10.x下调用bouncy Castle

delphi XE10.x可用于开发安卓应用,不可避免要涉及到java的各个方面,delphi是透由JNI来调用其中功能的,但jar能否在安卓下正常,要测试了才知道,如果用d8.bat能转型为dex,无误通过就没问题。1、先从官网https://www.bouncycastle.org/latest_releases.html下载bouncy Castle的最新库2、jar复制一份后改名,去掉版本号,然后用Java2op生成JNI文件3、把jar加到工程里面function .

2021-07-11 11:41:11 276

原创 Delphi XE10.x下启用d8.bat

首先在Embarcadero\Studio\21.0\bin下找到这个文件:CodeGear.Common.Targets按图修改红框标注的地方。在project中,先build(Shift + F9) ,生成dex文件,然后打开Deployment,把生成的classes.dex加进去注意Remote Path的位置,这是固定模式,不能是其他的,否则APP无法安装进手机。这样就可以发布了。...

2021-07-10 18:45:08 185

翻译 Java Cryptography Extension no Android

ava 的设计几乎总是考虑到其功能的扩展。例如,定义 JAX-RS(用于 RESTful Web 服务的 Java API)和 JAXB(用于 XML 绑定的 Java 架构)注解等 API 接口。因此,出现了在标准规范要求集之上提供几个额外功能的框架。Java SE 功能的扩展点之一是称为JCE(Java Cryptography Extension)的加密算法提供程序规范——该扩展为我们提供了一种添加不同加密提供程序的方法。这样,我们就可以使用 JRE(Java 运行时环境)标准中没有的算法,...

2021-07-10 17:12:46 186

原创 隐私政策

本软件尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本软件会按照本隐私权政策的规定使用和披露您的个人信息。但本软件将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本软件不会将这些信息对外披露或向第三方提供。本软件会不时更新本隐私权政策。您在同意本软件服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本软件服务使用协议不可分割的一部分。1.适用范围a)在您使用本软件网络服务,本软件自动接收并记录的您的手机

2020-06-16 08:36:32 494

原创 FireMonkey中的TFlowLayoutBreak

TFlowLayout 按段排列子控件。当使用 TFlowLayout 时,子控件按它们添加的顺序排列和显示。要开启新的一行,添加一个TFlowLayoutBreak,结果就象在文本中换行一样。TFlowLayout允许设置子控件的排列的一系列规则,这些规则可以通过这些属性来自定义: Justify、JustifyLastLine、VerticalGap和HorizontalGap....

2020-04-27 10:56:57 272

原创 libharu4delphi中的Text state(一)

libharu4delphi是原始C语言的delphi译本,包括用到的libpng函数,也全转译为delphi。除了自解释的T f和T fs以外,以下各节将进一步讨论这些参数。 (如第5.3节“文本对象”中所述,仅在文本对象内定义了三个与文本相关的其他参数:T m,文本矩阵; T LM,文本行矩阵;以及T RM,文本渲染放置和显示文本时,请查阅文本状态参数的值(使用第5.3.1节“文本定...

2020-04-09 11:16:20 196

华为虚拟机简略说明

总的来说,虚拟机就是一堆物理文件,只是这些文件依赖于特定的虚拟软件才能打开,最后呈现出不同的OS给用户。

2019-03-11

Parallel Programming with OmniThreadLib

用delphi开发并行程序,github上的开源库:OmniThreadLibaray作者最新力作

2018-05-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除