Delphi Other
sonadorje
花了一年多时间,把live555核心模块从C++翻译为delphi,从VLC播放视频ts文件还差临门一脚就成功了!
展开
-
用pascal版本的stdio库打开二进制文件
二进制文件与结构数组非常相似,只是结构位于磁盘文件中而不是内存中的数组中。因为二进制文件中的结构在磁盘上,所以您可以创建非常大的它们的集合(仅受可用磁盘空间的限制)。请记住,C 将磁盘文件中的所有内容视为从磁盘读取到内存或从内存读取到磁盘的字节块。C 使用文件指针,但它可以指向文件中的任何字节位置。打开文件后,您可以读取结构、写入结构或查找文件中的任何结构。您可以立即跳转到文件中的任何结构,它提供与数组中一样的随机访问。打开文件时,指针指向记录 0(文件中的第一条记录)。上面的代码中出现了几个不同的选项。原创 2023-02-17 09:04:47 · 307 阅读 · 0 评论 -
Pascal版本的 - freopen
让我们编译并运行上面的程序,它将在 STDOUT 发送以下行,因为最初我们没有打开 stdout -创建一个用于写入的空文件。如果已存在同名文件,则删除其内容并将该文件视为新的空文件。如果文件重新打开成功,该函数返回一个指向标识流的对象的指针,否则返回空指针。如果文件不存在,则创建该文件。-- 这是指向 FILE 对象的指针,该对象标识要重新打开的流。-- 这是包含文件访问模式的字符串。打开一个文件以更新读写。-- 这是包含要打开的文件的名称的。创建一个用于读写的空文件。打开文件进行读取和追加。原创 2023-02-11 22:53:42 · 561 阅读 · 0 评论 -
openssl4d下的RSA加密解密
该demo演示了如何用一套公钥、私钥加密解密一个字符串。第一段是用公钥加密,然后用私钥解密。第二段是用私钥加密,公钥解密。原创 2022-10-24 10:26:40 · 225 阅读 · 0 评论 -
Delphi中的数组和指针数学
在 Delphi 中,数组可以通过几种方式显式声明固定长度数组其中的符号[]允许开始和结束索引,或者您可以提供枚举类型作为索引。您通常应该从 0 开始索引范围,但如果您不能,那么下面的示例将需要偏移起始索引的值。翻译 2022-10-06 21:51:26 · 1344 阅读 · 0 评论 -
用openssl4delphi编写一个AES-256-cbc例子
AES-256-cbc原创 2022-09-11 14:21:46 · 568 阅读 · 0 评论 -
罕见的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 · 851 阅读 · 0 评论 -
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 · 363 阅读 · 0 评论 -
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 · 1174 阅读 · 0 评论 -
pthread4w-delphi编程示例(一)
线程基础: 线程操作包括线程的创建、终止、同步(连接、阻塞)、调度、数据管理和进程交互。 线程不维护已创建线程的列表,也不知道创建它的线程。 一个进程中的所有线程共享相同的地址空间。 同一进程中的线程共享: 进程说明 大多数数据 打开文件(描述符) 信号和信号捕捉程序 当前工作目录 用户和组 ID 每个线程都有一个独特的: 线程 ID 一组寄存器,堆栈指针 局部变量堆栈,返回地址 信号掩码 优先事项 返回值:errno 如果正常,pthrea原创 2022-01-20 14:27:19 · 461 阅读 · 0 评论 -
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 · 1276 阅读 · 0 评论 -
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 · 328 阅读 · 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 · 377 阅读 · 0 评论 -
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 · 443 阅读 · 0 评论 -
玩转rabbitmq-delphi(一)
介绍先决条件本教程假设 RabbitMQ 已安装并运行在标准端口(5672)上的本地主机上。如果您使用不同的主机、端口或凭据,则需要调整连接设置。RabbitMQ 是一个消息代理:它接受和转发消息。您可以将其视为邮局:当您将要投递的邮件放入邮箱时,您可以确定信件承运人最终会将邮件递送给您的收件人。在这个比喻中,RabbitMQ 是一个邮箱、一个邮局和一个信件载体。RabbitMQ 和邮局之间的主要区别在于它不处理纸张,而是接受、存储和转发二进制数据 blob消息。Rabbi..原创 2021-10-15 13:12:20 · 1240 阅读 · 0 评论 -
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 · 843 阅读 · 0 评论 -
建造者设计模式
Builder Pattern是说“使用一步一步的方法从简单的对象构建一个复杂的对象”它主要用于无法在单个步骤中创建对象的情况,例如在复杂对象的反序列化中。Builder设计模式的优势Builder Pattern的主要优点如下:它明确区分了对象的构造和表示。 它可以更好地控制施工过程。 它支持更改对象的内部表示。UML for Builder Pattern 示例构建器设计模式示例要创建构建器设计模式的简单示例,您需要遵循以下 6 个步骤。创建 IPacking.原创 2021-08-03 10:21:53 · 81 阅读 · 0 评论 -
原型设计模式
原型模式表示克隆现有对象而不是创建新对象,也可以根据需要进行定制。如果创建新对象的成本昂贵且资源密集,则应遵循此模式。原型模式的优势原型模式的主要优点如下:它减少了子分类的需要。 它隐藏了创建对象的复杂性。 客户端可以在不知道它将是哪种类型的对象的情况下获取新对象。 它允许您在运行时添加或删除对象。原型模式的使用在运行时实例化类时。 当创建对象的成本昂贵或复杂时。 当您希望将应用程序中的类数保持最少时。 当客户端应用程序需要不知道对象的创建和表示时。原型模式的原创 2021-08-03 08:59:31 · 84 阅读 · 0 评论 -
单例设计模式
单例模式说,只需“定义一个只有一个实例的类并提供对其的全局访问点”。换句话说,一个类必须确保只能创建单个实例,并且所有其他类都可以使用单个对象。单例设计模式有两种形式早期实例化:在加载时创建实例。 延迟实例化:需要时创建实例。单例设计模式的优势节省内存,因为不是在每次请求时都创建对象。只有单个实例被一次又一次地重用。单例设计模式的使用单例模式主要用于多线程和数据库应用程序。它用于日志记录、缓存、线程池、配置设置等。单例设计模式的 Uml如何创建单例设计模式?.原创 2021-08-01 17:14:55 · 103 阅读 · 0 评论 -
Abstract Factory Pattern Example
抽象工厂模式抽象工厂模式表示只需定义一个接口或抽象类来创建相关(或依赖)对象系列,但不指定它们的具体子类。这意味着抽象工厂让一个类返回一个类工厂。所以,这就是抽象工厂模式比工厂模式高一级的原因。抽象工厂模式也称为Kit。抽象工厂模式的优势抽象工厂模式将客户端代码与具体(实现)类隔离开来。 它简化了对象系列的交换。 它促进了对象之间的一致性。抽象工厂模式的使用当系统需要独立于其对象的创建、组合和表示方式时。 当相关对象系列必须一起使用时,则需要强制执行此约束。 当您想提供一个不显原创 2021-07-31 17:27:36 · 79 阅读 · 0 评论 -
Delphi XE10.x下的工厂模式
意图提供用于创建相关或依赖对象系列的接口,而无需指定它们的具体类。解释真实世界的例子要创建一个王国,我们需要具有共同主题的对象。精灵王国需要精灵国王、精灵城堡和精灵军队,而兽人王国需要兽人国王、兽人城堡和兽人军队。王国中的对象之间存在依赖关系。简单来说一个创建工厂的工厂;将单个但相关/依赖的工厂组合在一起而不指定它们的具体类的工厂。维基百科说抽象工厂模式提供了一种封装一组具有共同主题的独立工厂的方法,而无需指定它们的具体类程序示例翻译上面的王国例子。首先.原创 2021-07-30 16:36:36 · 222 阅读 · 0 评论 -
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 · 1029 阅读 · 0 评论 -
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 · 323 阅读 · 1 评论 -
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 · 342 阅读 · 0 评论 -
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 · 220 阅读 · 0 评论 -
FireMonkey中的TFlowLayoutBreak
TFlowLayout 按段排列子控件。当使用 TFlowLayout 时,子控件按它们添加的顺序排列和显示。要开启新的一行,添加一个TFlowLayoutBreak,结果就象在文本中换行一样。TFlowLayout允许设置子控件的排列的一系列规则,这些规则可以通过这些属性来自定义: Justify、JustifyLastLine、VerticalGap和HorizontalGap....原创 2020-04-27 10:56:57 · 314 阅读 · 0 评论 -
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 · 247 阅读 · 0 评论 -
libharu4delphi 输出文字初探
libharu4delphi是原始C语言的delphi译本,包括用到的libpng函数,也全转译为delphi。任何显示文字的软体,展现出来的无非是字形,大小,颜色,位置。在PDF里,能够不以明文存储文字,而是以文字编码存储。例如下面的片段:BT/F1 24 Tf50 460 Td<5C715DDD5F0257DFFF0C98CE6708540C5929FF0C5C8266F...原创 2020-04-08 15:55:27 · 227 阅读 · 0 评论 -
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 · 1298 阅读 · 2 评论 -
libpng在C++Builder XE2下的编译
为了构建和使用libpng,请按照以下步骤操作:1)。在与libpng相同级别的目录中安装zlib。2)。在控制台窗口中,转到zlib目录并键入:make -f win32 \ Makefile.bor执行此步骤后,您应该在zlib目录中有一个名为zlib.lib的文件。3)。将以下添加到Project--Options--【conditional define】:PNG_USE_...原创 2020-03-12 22:08:53 · 177 阅读 · 0 评论 -
zlib在C++Builder下的编译
zlib版本1.28C++Builder 6.0~XE(N)都可行创建一个DLL工程,把*.c都加进去注意这个选项非常重要,否则DLL函数命前面会自动加下划线。配合该选项,zconf.h文件还需稍做修改,CBuilder中的默认约定不是__stdcall然后就可以编译啦!对比一下前后DLL的差别:...原创 2020-03-12 16:19:52 · 286 阅读 · 0 评论 -
libharu4delphi 可在跨平台的firemonkey下编译
libHaru是一个免费的跨平台开源库,用于生成PDF文件。目前,libHaru不支持读取和编辑现有的PDF文件,并且这种支持不太可能出现。 它支持以下功能: 生成带有线条,文本,图像的PDF文件。 大纲,文本注释,链接注释。 使用deflate-decode压缩文档。 嵌入PNG,Jpeg图片。 嵌入Type1字体和TrueType字体。 创建加密的PDF文件。 使用各种字符集(ISO8859-...原创 2020-03-08 20:56:28 · 343 阅读 · 0 评论 -
C语言中的宏函数翻译为delphi
C的.h文件声明如下# define HPDF_EXPORT(A) __declspec(dllexport) A __stdcall在delphi或者是FPC里是不存在宏函数定义的,所以上面这种定义没法直接翻译为pascal,但可以根据上下文找到合适的方法。例如:HPDF_EXPORT(const char *) HPDF_GetVersion (void);在d...原创 2020-02-20 15:03:45 · 294 阅读 · 0 评论 -
Getting into Node.js from Delphi
Getting into Node.js from DelphiJon Lennart Aasenden6 months agoDelphi is one of the best development toolchains for Windows. I have been an avid fan of Delphi since it was first released, and ...转载 2020-01-07 11:45:09 · 440 阅读 · 0 评论 -
Calling node.js from Delphi
Jon L. AasendenCalling node.js from DelphiJon Lennart Aasenden6 months agoWe got a good question about how to start a node.js program from Delphi on ourFacebook group today(third one i...转载 2020-01-07 11:35:46 · 664 阅读 · 0 评论 -
Delphi中的PChar加减法
varfRequestBuffer:PChar;fRequestBuffer = ‘OPTIONS rtsp://127.0.0.1:554/video/test.ts RTSP/1.0'#$D#$A'CSeq: 2'#$D#$A'User-Agent: LibVLC/3.0.7.1 (LIVE555 Streaming Media v2016.11.28)'#$D#$A#$D#$At...原创 2019-08-25 21:38:01 · 558 阅读 · 0 评论 -
delphi xe开发rabbitmq介绍(一)
在rabbitmq的官网上有众多的版本的AMQP client,在整个社区也是java,python版本的client独具鳌头。delphi版本的唯有Habari Client for RabbitMQ,且是商业软件,要人民币1200多元。遍寻github,终于找到2个开源的client:https://github.com/lgadina/comotobohttps://github.com/l...原创 2018-05-16 15:24:35 · 4081 阅读 · 9 评论 -
用delphi xe 开发rabbitmq应用(二)
properties(属性)是可以附加到在队列中结束的消息的attributes。这些不是任意的attributes,而是具有特定的定义。特别是,这些属性被定义为BASIC类的成员(即类#60)。 BASIC类是唯一具有属性的类。这些属性出现在内容标题帧的尾部。它们的规范分为两部分:property flags(属性标志)properties属性列表属性标志用于指定属性列表中记录的14个属性中的哪...原创 2018-07-04 10:33:08 · 1403 阅读 · 0 评论 -
用delphi xe 开发rabbitmq应用(三)
【rabbitmq的核心数据类型】在AMQP V0.9.1定义了一套核心的数据类型,在delphi中做了如下定义:type amqp_octet = byte; amqp_2octet = word; amqp_4octet = LongWord; amqp_8octet = UInt64; amqp_boolean = Boolean; amqp_bit = amqp_boolea...原创 2018-07-04 16:06:35 · 1410 阅读 · 4 评论 -
用delphi xe 开发rabbitmq应用(四)
读取死信队列死信队列中的消息由系统自动增加了一些标识属性,x-death(是一个Array),x-first-death-exchange(queue/reason)。死信队列中的消息如果不是由于异常(publisher代码控制)而进入,由于超时而进入,那其中的消息仍然可以正常读取(消费),只要代码中做特别处理。 try //解码Header,如果从死信队列接收...原创 2018-07-18 11:08:42 · 1183 阅读 · 0 评论 -
用python4delphi开发一个rabbitmq应用
你可以从https://github.com/pyscripter/python4delphi下载vcl。VCL可以支持python 2.x到3.x,只需要你修改* .inc文件! 在我的示例中,我使用变量import * .py并执行它。procedure TForm1.btnPublishClick(Sender: TObject);vara, main: variant;folde...原创 2018-08-01 10:11:59 · 2573 阅读 · 0 评论