祝愿大家身体健康!

 找回密码
 站点注册
查看: 674|回复: 0

[PBIDEA] PBIDEA 系列技术文章总目录(pbai 整理 · 持续更新)

[复制链接]
发表于 2026-8-21 09:47:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
本帖最后由 pbai 于 2026-11-14 06:10 编辑

PBIDEA 系列技术文章总目录(pbai 整理 · 持续更新)

阅读说明
1. 适用版本:一律以顶部【版本声明】为准 —— PBIDEA 支持 PowerBuilder 8 及以上(PB 8/9/10/10.5/11.x/12.x 及以上通用);各篇 PB 侧的具体写法以原文标注为准
2. 支持数据库:各篇不同(SQL Server / SQLite / Oracle 等按原文标注;部分文章无需数据库)
3. 操作系统与环境要求:PBIDEA 本体支持 Windows XP 及以上(XP / 7 / 10 / 11 均可);需部署 PBIDEA 运行库(PbIdea.dll 等);部分文章需 websuite.pbl / painter.pbl / sql.pbl
4. 难度系数:★☆☆☆☆(本文为目录索引帖,无技术难度;各文章难度系数以原文「阅读说明」标注为准,不虚标)
5. 其它阅读说明:本目录由 pbai 整理,随新文章发布持续更新;点标题直接跳转原文,建议先看分类说明再选读
【版本声明】
- 本文以 PBIDEA 当前最新版本为准(版本源由维护方统一核验),并对照随版发布的源码整理。
- 核验日期:2026-11-09(2026-11-14 复核一致);当次核验的 PBIDEA 核心运行库:18,318,336 字节 / 2611 个导出,md5 25ac290414ab…。
- 版本识别口径:逐项解析 PE 导出表(文件体积、目录名都不能作为判据)。
- 适用平台:Windows XP 及以上(XP / 7 / 10 / 11 均可);PowerBuilder 8 及以上(PB 8/9/10/10.5/11.x/12.x 及以上通用)。本文的实机验证环境为 Windows 10 + PB 10 与 PB 12.5。
- PBIDEA 版本会持续更新,本文只对上述核验时点的最新版本负责;后续若行为有变,以新版为准。

一、这是什么

这里是 pbai 在论坛发布的 PBIDEA 系列技术文章总目录。PBIDEA 是 PowerBuilder 的功能增强组件库(PbIdea.dll),提供 uo_json / uo_httpclient / uo_database / uo_database_pool / uo_xlsx / uo_chart / sm4utils / uo_thread 等对象,覆盖数据交换、数据库、办公、加密、并发等场景。本目录按功能分类汇总全部文章,每篇附一句话用途说明,方便按需查阅;后续新文章会继续追加进对应分类。
月度目录:本总目录为全量总索引(收录 2026 年 10 月及以前全部文章,按主题分类)。按时间查阅请看各月月度目录:PBIDEA 月度目录见 fid=93 同月目录帖;核心 PB 月度目录见本版块每月 1 日发布的《YYYY年MM月 PowerBuilder 文章目录》。
本月目录:2026年11月 PBIDEA 文章目录
本月目录:2026年10月 PBIDEA 文章目录

二、分类目录
截止 2026-11-14:共 53 篇文章,分 36 个主题分类。本目录为全量总索引,只增不删。

1. 数据库连接与访问

#1. PBIDEA:用 uo_database 与 uo_database_pool 做多库连接和连接池复用 —— uo_database 多库并存 + 连接池复用(CreatePool → QueryPool → GiveBackPool → DestroyPool);回帖补充 SQL Server 2000 的 MSS 配置、ODBC(SQLSRV32)与 ADO.NET 三种连接方案 【与本类 #3 同主题】本篇是多库并存与连接池的早期概览版,概念与 API 顺序讲得较简;完整的实机验证、占位符规则与 12 个踩坑见 #3。

#2. PBIDEA:uo_database 连接 SQL Server 2022 完整实战 —— 连接 / 增删改查 / 存储过程 / 建库 SQL 一条龙实战

#3. PBIDEA:用 uo_database 与 uo_database_pool 做数据库连接与连接池复用 —— 实机验证篇(PB10 基准 + SQL Server 2008 R2):完整跑通「连接 → 建表 → 三种参数化写入 → 取数 → 事务 → 连接池 → 清理」;重点讲清 :1 / :名字 占位符(不是 ?)、变参须传类型化变量、decimal 不能绑定须用 double、CreatePool 模板连接必须先 Open()、结果集读完须重查才能 FetchJsons、提交后 RowsAffected() 变 -1 等 12 个实机踩出的坑,并附 SQLCA / uo_database / pblit 三条连库路线对比 【与本类 #1 同主题】本篇是在 #1 基础上的实机验证完整版,含建表 SQL、三种参数化写法、占位符规则与 12 个实机坑;只想快速了解连接池 API 顺序可直接看 #1。

#4. PBIDEA:SQLite 嵌入式数据库实战全解 —— uo_sqlite3 直连与 uo_database 两条路线(PB10 基准 · PB12.5 实测) —— 双轨实测篇(21 组用例,PB10 与 PB12.5 读数逐字一致、零版本差异):讲透 SQLite 两条路线——路线 A uo_database 设 DBMS='SQLite'(连接四件套属性、建表、:1 占位符 + BindParam、GetField 元数据、FetchNext/GetNumber、FetchJsons、显式事务)、路线 B uo_sqlite3 直连(open 四重载/exec/close/CreateFunction/ImportCSV/SetDataDirectory/SqlCode/SqlErrText 全成员清单);★六条最值钱的实测结论:①缺 sqlite3.dll 时路线 A 报 sqldbcode=3 指名缺件、路线 B 静默 false 连错误都不给;②不 CommitTrans 就关连接,数据全丢(无自动提交);③GetField 下标是 1 基,用 0 号下标拿到空对象、紧接着 GetName 直接崩运行时且编译不报错;④路线 B 单参/无参 open 都是内存态不落盘(文件永远 0 字节),唯一落盘姿势是 open(不存在的文件名,0) 一次性建库,且建好的库 uo_sqlite3 自己再也打不开,须换路线 A;⑤先 close 后 open 的 uo_sqlite3 实例报废,open 恒 false;⑥ImportCSV 四种形态(CRLF/LF/无表头/文件路径)全部静默 false 且 SqlCode=0、SqlErrText 是 'ok',这版不可用;另附 FetchJsons 必须在新查询上调用、无参版把整个结果集打包进数组第一个元素(返回值是 JSON 个数不是行数)、缺表时 ExecuteSQL 返回 IsValid 空壳须加看 sqlcode、GetSize 读数与列宽对不上、NULL 往返与 GetType 类型码对照,以及 16 条坑清单与两路线选型结论


2. HTTP 与 JSON 数据交换

#1. PBIDEA:uo_httpclient 发请求并处理 JSON 响应 —— GET / POST / PUT / DELETE、JWT 与 Basic 鉴权、大文件下载、超时设置;强调「返回 blob → fromUtf8 → uo_json 解析」三步(发在『 Sybase PowerBuilder 』版块)

#2. PBIDEA:用 uo_json 的 set/get 与路径语法操作 JSON —— set / get 建树取值、/a/0/b 路径语法、Parse 解析、GetKeys 等便利方法(发在『 Sybase PowerBuilder 』版块)

#3. PBIDEA:用 uo_xml 解析与生成 XML(节点树遍历、读写节点与属性) —— uo_xml / uo_xml_node / uo_xml_attribute 三对象模型,Parse/ParseFile/GetNode/GetContent/GetAttribute/AddNode/AddAttribute/ToString/Save,支持 XPath 风格路径取节点

#4. PBIDEA:用 uo_ftp / uo_sftp 做 FTP 与 SFTP 文件传输 —— uo_ftp(21 端口)与 uo_sftp(22 端口)方法全貌、连接/列目录/上传下载/进度回调、中文名乱码与 SFTP 无 mkdir 等坑、FTP 与 SFTP 选型对比

#5. PBIDEA:用 uo_httpclient 做大文件下载并显示实时进度 —— 三参 DownLoadFile(url, path, TRUE) + 子类 ondownload 事件实时刷进度;DownLoad 落 blob、返回 FALSE 取消下载、SetProxy/SetTimeout/鉴权、与 uo_downloader/uo_curl 对比、大文件放后台线程避免假死


3. 办公组件:Excel 与图表

#1. PBIDEA:用 uo_xlsx 不装 Excel 也能读写 xlsx 文件 —— uo_xlsx 工作簿 / 工作表 / 单元格 / 格式列宽,libxl 引擎,不依赖本机安装 Office

#2. PBIDEA:用 uo_chart 画出柱状图与饼图 —— 11 种图表类型、DataStore 喂数约定(第 1 列分组名、第 2 列起数值系列)、uf_makechart 导出 PNG、点击取数交互


4. 加密与安全

#1. PBIDEA:国密 SM4 对称加解密(ECB 与 CBC 两种模式) —— sm4utils:密钥 16 字节、IV 随机、BlobToHex / Base64Encode 密文落地、ECB 与 CBC 选择建议

#2. PBIDEA:用 uo_crypto 做 RSA 签名与验签,对接开放平台 —— uo_crypto.SignWithRSA / SignWithRSAVerify 签名验签主线、AlignKey 对齐密钥、UTF-8 与 method 两端一致、与 uo_rsa 的 blob 链路及 PKCS7sign 对比

#3. PBIDEA:用 SM3 与 HMAC 做数据完整性校验 —— sm3utils 的 sm3/sm3hmac 一步到位(autoinstantiate、BlobToHex 显示)+ uo_hash/uo_hmac 流式算子(open→update→Final,uo_hmac.open 为「密钥,算法」两参),密钥参与防伪造、与纯哈希对比、大文件分块与请求签名实战


5. 并发与线程

#1. PBIDEA:用 uo_thread 把耗时任务丢到后台,界面不再卡死 —— uo_thread + uo_thread_factory:StartThread 起线程、InvokeFactory 回调主线程、SetGlobalVar 跨线程传值、ExitThread 收尾;回帖补充 uo_threadpool(SetTask / ue_finish 取返回值)与 uo_future_thread(SetValue / GetValue)两种方式


6. 文件与压缩

#1. PBIDEA:用 uo_zip 与 uo_7z 在 PowerBuilder 里做 ZIP 与 7z 压缩解压 —— uo_zip(ZIP:Open→Add→Close 三段式、加密/注释/按条目 ReadBlob、内存 blob 打包)与 uo_7z(7z:AddDir/AddFile→Compress、Extract 解压、内存 Compress7Z/Uncompress7Z),配合 uo_dir 做选择性遍历再压缩

#2. PBIDEA:用 uo_dir 做目录与文件枚举、批量建删与文件时间管理(PB10 基准 · PB12.5 实测) —— 实机验证篇(PB10 基准 · PB12.5 实测,两版读数逐字节一致):讲透 uo_dir 全部 18 个方法(md/rd/cd/driver/files/dirs/mv/del/exist/GetTime/SetTime/GetSize 及重载)与 autoinstantiate 用法(声明即用、禁止 create/destroy);★两个最值钱的实测坑:① md() 返回「是否新建了目录」,目录已存在时返回 false 但不报错;② exist() 只认文件不认目录,确认目录是否存在得用 dirs() 枚举父目录判断;另含 driver 返回不带冒号的盘符、DateTime 六参构造不存在须用 DateTime(Date(y,m,d),Time(h,mi,s))、GetTime/SetTime 改文件时间、files/dirs 用 ref 数组回传列表与数量、mv/del/rd 全链路,以及 13 条实测坑清单与原生方案对比

#3. PBIDEA:用 uo_compress 做内存级压缩全解 —— zlib / deflate / gzip / snappy 与 zip 条目的真实边界(PB10 基准 · PB12.5 实测) —— 实机验证篇(25 组探针,两版读数逐字相同、零版本差异):讲透 uo_compress 全部 15 条声明——zCompress/zUncompress(compressType 0=裸deflate 1=zlib 2=gzip)、gzcompress/gzuncompress、snappy* 四个重载、CompressEntry/DecompressEntry(单条 ZIP local header)、SevenZipAddFile/SevenZipAExtract(依赖外部 7z 组件);★六条最值钱的实测结论:① 解压类型错配一律静默返回 0 字节、无任何错误码,且单参 zUncompress 认 zlib/gzip 却不认裸 deflate;② 类型 1 与类型 2 双向互通(zlib↔gzip 都能解),类型 0 是孤岛(1/2 都解不开它);③ 非法 compressType(3 / -1 / 99)静默回落成 zlib,字节与 type1 完全相同;④ nLevel 被忽略——0~9 与 -1/10 九档输出同尺寸,PB 产物与 Python zlib.compress(src,6) 逐字节相同(内部固定 6 档);⑤ 截断的压缩数据解压出 24 字节半截明文却不报错(最危险),必须用「原始长度 + CRC」自校验;⑥ CompressEntry 把中文名按 UTF-8 写入但不置 bit 11 标志位,回读变 鎶ヨ〃.txt(7 字符);另含空/1字节/随机/1MB 四档边界(空→8 字节、随机 65536→65562)、snappy 与 zlib 压缩比对照(573 vs 114)、Blob(字符串) 是 UTF-16LE 须先 ToUTF8、7z 失败路径直接抛 Error calling external function 而非返回 false、与 Python/PB 互通换算表,以及 12 条坑清单 【与本类 #1 分工】#1 讲 uo_zip/uo_7z 的文件打包容器(中央目录、条目列表、加密注释),本篇讲底层压缩流引擎(内存 blob、三种封装格式、错误判定);要做「多文件打进一个包」看 #1,要压一段字节或用 CompressEntry 手工拼条目看本篇

#4. PBIDEA:用 uo_file 做文件读写全解(文本与 blob 直读直写、句柄式读写、文件加密与占用查询,PB10 基准 · PB12.5 实测) —— 全通道实测篇(38 组探针双轨四绿,两版读数逐字一致):讲透 uo_file 直读直写两层与句柄层全部边界——文本层 StringToTextFile/StringFromTextFile(utf8=true 带 3 字节 BOM、自动转码双向可靠、空字符串一律拒写)、blob 层 BlobFromFile/BlobToFile(Blob(字符串) 是 UTF-16LE 每字符 2 字节、覆盖即截断、缺文件返回空 blob 非 NULL);句柄层 OpenFile 四形态(1 参不建新文件、read! 不拦 WriteFile 会写坏文件、append! 编译不过 C0052)、Seek 按字节定位(三种 method 返回新字节位)、WriteFile 指针覆盖不截尾、ReadFile(n) 指针跟走、ReadLine 只配 GBK 文本(与 UTF-16 混用必错位)、lockFile 真排他、isTempFile 关闭即删;QueryFileLocker 拿占用进程 PID 与完整路径;EncryptoFile 三件套(错密钥拒解不生成文件、compress=true 小文件反而更大、EncryptoFileRead 返回原始字节须 String(lb, EncodingANSI!));FindFile 4 参 ref 数组重载类型库未注册(C0084)只能用 3 参 + ue_filefind 回调(返回计数可信、事件实测未触发);含 14 条坑清单与 uo_dir/uo_stream/uo_blob 分工对比 【与本类 #2 分工】#2 的 uo_dir 管目录(枚举/建删/时间),本篇管文件内容(读写字节、句柄、锁、加密落盘)

#5. PBIDEA:用 uo_vfs 做虚拟文件系统全解(目录与 zip 挂成一个盘、写入靠写目录、句柄属性崩溃边界,PB10 基准 · PB12.5 实测) —— 全边界实测篇(60 余个独立探针 + 6 个交付示例,PB10/PB12.5 双轨读数逐字一致、零版本差异):讲透 uo_vfs 20 个方法与 uo_vfs_reader/uo_vfs_writer 17 个方法——mount 三形态(目录 / zip / 内存 blob)、SetRoot 换根、SetWriteDir、GetFiles 双重重载、state 取属性、UnMount、句柄式读写;★八条最值钱的实测结论:① SupportedArchive 只列 ZIP/7Z,硬盘目录能挂但不在清单里,且内容识别不看扩展名(ZIP 改名 .7z 照样挂上);② state() 恒返回 false,判据是 JSON 里的 filesize(-1=不存在);ZIP 成员一律 readonly:true,包里目录项时间戳是 1970-01-01 08:00:00 哨兵值;③ GetRealDir() 对 ZIP 成员返回「包文件路径」而非成员路径;ZIP 挂载成功后 vfsLastError() 会残留 not found(11),判成败只看 mount 返回值;④ 写文件必须 SetWriteDir 且路径相对写目录——带挂载点前缀(/a/x.txt、/w/x.txt)write() 恒 false;写目录里的文件不被 VFS 搜到,要读回必须把该目录也 mount 进来;被挂载的目录本身只读,往里写不落盘;⑤ 无效句柄上调 FileSize/tell/eof/seek/flush 直接崩进程(exit 3221225477 / 0xC0000005,TRY-CATCH 抓不住)——CreateReader 对不存在的文件也返回 IsValid=true 的合法对象,IsValid 不代表句柄可用;⑥ 同一挂载点「先挂的优先」,append=true 不改变顺序(与帮助注释说法相反);UnMount() 参数是挂载时的实体路径(blob 挂载用返回的 archive_xxx),传虚拟目录报 not mounted(10);⑦ 路径安全:..、./、反斜杠一律返回 filename is illegal or insecure(23),双斜杠反而可以;⑧ 写字符串落 GBK、写 Blob(字符串) 落 UTF-16LE(都是 4 字节,靠长度分不出来);覆盖写会截断、追加用 CreateWriter(file,true)、子目录自动创建;另附 16 条坑清单、reader 分段读边界表、「主资源 + 补丁 + 输出」三层挂载实战与 PB10 兼容版 PBL 附件 【与本类 #1 / #2 / #3 / #4 分工】#1 是 uo_zip/uo_7z 的打包解压、#3 是 uo_compress 的内存压缩流、#4 是 uo_file 的单文件读写,本篇是把目录与归档挂成统一命名空间的只读访问 + 单写目录输出(不解压、按需读、可热替换)
#6. PBIDEA:用 uo_tempfile 管理临时文件全解(唯一命名、托管自动清理与 Remove/Clear 的删除语义,PB10 基准 · PB12.5 实测) —— 全边界实测篇(10 个探针 NVO + 1 个对照探针双轨四绿,行为读数两版语义一致、零版本差异):讲透 uo_tempfile 全部 8 个方法(GetFile 三形态 / Add / Remove / Exist / Clear / GetPath)与托管自动清理生命周期;★七条最值钱的实测结论:① GetFile 只给名不建文件(拿到路径立即 FileExists=false 是正常,文件要自己写);② 名字 = 进程 8 位 hex 前缀 + 32 位大写随机 hex(进程内唯一、跨进程必不同,并发安全白送);③ fileNameOrExt 二合一语义——以点开头当扩展名(主体仍随机)、否则当完整文件名,但两种写法都会被拼上进程前缀,找文件要用返回值别用传入值;④ Exist 是托管名单语义不是磁盘判断(手工建的真实文件 Add 前 Exist=false;GetFile 后文件没建 Exist=true);⑤ Remove 与 Clear 都是立即删文件(不是摘名单!Remove 后磁盘当场为空、Clear 一锅端);⑥ destroy 即清名单(析构 UnInit 自动删全部托管文件;addManager=false 的不托管文件原样保留——要跨进程交接用这个);⑦ PB 原生没有 GetTempFile / GetTempDirectory(双轨 C0051 实证 + 帮助库 2138 条无此二函数,别找原生替代);另含 GetPath 跟随 TMP/TEMP 环境变量的部署用法、GetFile('') 空串按无扩展名处理不崩、destroy 后访问 Null object reference(TRY-CATCH 可捕)、三档清理演示代码与手工方案对比表,以及 12 条坑清单 【与本类 #2 / #4 分工】#2 的 uo_dir 管目录(枚举/建删/时间)、#4 的 uo_file 管文件内容(读写字节/句柄/锁),本篇管临时文件的唯一命名与自动清理(名字生成、托管名单、Remove/Clear/destroy 三档删除)



7. PDF 生成与文档预览

#1. PBIDEA:用 uo_pdfwriter/uo_pdfview/uo_pdfmaker 生成与预览 PDF —— uo_pdfwriter 从零绘制(文本/图形/图片)、uo_pdfmaker 把 DataWindow 虚拟打印成 PDF、uo_pdfview 窗口预览与合并/拆分/提取文本;含 MeargePDF 拼写坑、Open 带不带文件名的数据去向、中文与字体等边界


8. 日志与定时

#1. PBIDEA:用 uo_logger 与 uo_timer 做统一分级日志与周期定时任务 —— uo_logger 分级日志(info/warn/error/trace/debug/critical,按天滚动、按大小回滚、UTF-8 中文、Flush 落盘)+ uo_timer 基于线程的定时器(start(mesc)/stop + timer 事件),替代杂乱 MessageBox 调试与窗口 Timer 冲突,并提示跨线程操作 UI 红线

#2. PBIDEA:uo_eventlog 事件日志读取全解 —— 一个方法名三重重载、静默降级与截断判据(PB10 基准 · PB12.5 实测) —— 全边界实测篇(41 个探测 NVO + 23 组关键用例 × PB10/PB12.5 双轨,16 例输出逐字节一致、7 例差异全部是活日志增长;演示工具类 7 个方法 6 个用例双轨全 PASS 且两轨输出逐字节相同):uo_eventlog 整个对象只有 1 个方法名(EventLogToJson,3 条重载:整本 / 单事件 ID / 事件 ID 数组),纯只读,没有任何写或清除能力;★最值钱的实测结论:① 非法日志名不报错、静默回落到「上一次成功读取的那本日志」('NoSuchLogXYZ' 返回 true,且条数与首条 no、source、time 三处指纹与 Application 全同;连读两本日志之后再喂非法名,拿到的仍然是上一次那本),整轮实测里唯一能拿到 false 的写法是空名字,而「存在但读不到」的日志('Windows PowerShell')也返回 true + 0 条 —— 所以 name 参数必须自己过白名单;② 不带过滤的读取不是全量,只给「最近约 1 万条」(本机 Application 真实 26546 条只读到 10000 条、Security 真实 28340 条只读到 10006~10009、System 5878 条完整),而且这个上限不是常量(同一二进制、同一命令,一小时内 Application 读到 10035 / 10037 / 10000 / 10002 四个值),完整性只能用 ArrCount() = Number(首条的 no) 判定(no 是全局递增记录号,未截断时最新一条的 no 恰好等于总条数;System 5878=5878 判作 COMPLETE、Application 10000≠26546 判作 TRUNCATED),该判据不依赖任何版本常量;③ filter_id 与 filter_ids 的类型是 int(16 位有符号,上限 32767),32768 / 40000 一律静默变成空集(40000 存进 int 得 -25536,import 与 rebuild 全部 0 错、运行也不报错),事件 ID 大于 32767 的记录永远过滤不出来,而编译器给不了任何保护(long 变量直接传 int 参数不报错);④ uo_json 的子对象不能跨对象传参,Get(i, item) 出来的子对象一旦传给另一个函数就直接崩进程(exit code 3221225477 / 0xC0000005,没有任何错误信息、TRY-CATCH 也兜不住),只有根对象可以传,要取子对象内容必须传「根 + 下标」、在被调方内部再 Get;另附返回结构实测(正好 7 个字段 xh / no / time / eventID / type / typeName / source,顺序固定、拿不到事件正文,没有 Message / User / Category)、级别映射实测(0 未知 / 1 错误 / 2 警告 / 4 信息 / 8 成功审核 / 16 失败审核)、xh 与 no 的区别(结果内序号 vs 日志内记录号,过滤后 xh 重新编号而 no 保持原值)、filter=0 得 400 条与手工 118 条的口径差异、Security 过滤 6005 与手工计数逐条一致(18 = 18)、日志名大小写不敏感且支持中文别名、缺 PbIdea.dll 直接抛 PB runtime error: Error opening DLL library 的复现过程、以及一条流传说法的修正:string(0) 在本机 PB10 / PB12.5 双轨都返回 '0' 而不是空串,两种 0 值统计写法逐条一致(117 / 117);给出可直接抄的 7 方法工具类(of_name_ok 白名单 / of_read_basic / of_read_by_id / of_read_by_ids / of_item_line / of_level_count / of_check_log 完整性 + 回落体检)与 4 按钮演示窗口,共 20 条坑清单;文中如实标注七处未实测项(1 万条上限的确切触发机制不作结论、非管理员上下文读 Security、自定义日志、远程主机、日志写入、filter 超界穷举、数值字段取串行为)


9. 配置读写与键值存储

#1. PBIDEA:用 uo_config 把配置存成 JSON 文件(替代 ini 的轻量方案) —— uo_config 以 JSON 文件替代 ini(open → set_*/get_* → save/close,键用 /分组/名称 层级路径,四类型 string/int/double/boolean 带默认值);含 fromstring/tostring 内存加载、open(文件名,密钥) 自动 SM4 加密、read_object/write_object 窗口布局序列化,以及与 uo_kv 嵌入式键值库选型对比

#2. PBIDEA:用 uo_kv 做嵌入式键值库全解(LevelDB 目录落盘、类型化读写的 12 个重载与六类静默失败,PB10 基准 · PB12.5 实测) —— 嵌入式键值库(LevelDB 形态)全解:16 个声明(Open / Close / DeleteDB 两种 / Set / 12 个 Get 重载 / Get(uo_json) 整库导出 / GetKeyList / Remove);★六类静默失败:dbName 是目录不是文件(FileLength 恒 -1)、错口令照样 Open=true 只有 Get 才 false、跨类型读同族才通(int↔double 互不通、string 数字永不转)、数值用 string 读返回 true 却给 * / 空串 / 乱码、boolean 存不进(Set 返回 false 且键不建)、uint 被截成 16 位、ulong 读进 longlong 变负、空串值存得进读不回;另含 Remove 恒 true 须 Get 复核、无参 DeleteDB 后实例报废、Close 后可再 Open、未开库全 false 不崩、GetKeyList 整表替换并扩容且按字节序排、值按 GBK 落盘(3 汉字 6 字节)、1000 次写 31ms,以及 16 条坑清单与 uo_config / uo_map / SQLite 选型对比



10. 消息队列与发布订阅(Redis / Kafka)

#1. PBIDEA:用 uo_redis 与 uo_kafka 做消息队列与发布订阅 —— uo_redis 用 LPUSH/BRPOP 做点对点队列、BRPOP 返回数组 [队列名,消息] 的解析、uo_redisreply 的 Get/GetType 与 REPLY_* 常量、uo_redisasync 异步订阅;uo_kafka_producer 的 ProducerSend/ProducerGetError 与 uo_kafka_consumer 的 ConsumerSubscribe/ConsumerPoll + ue_message 事件回调;Redis List 与 Pub/Sub、Redis 与 Kafka 选型对比、Pipeline 批量等边界与扩展


11. 界面导航与 TreeView

#1. PBIDEA:用 TreeView 与菜单树做导航 —— 原生 TreeView 地基方法全貌;vo_treeview_pbidea 用 loadjson/loadxml 一行渲染导航树(点击读 tvi.data 解析,键 text/href/tip)、uo_treeview 用 of_retrieve_ex 从菜单 JSON 文件加载并触发 ue_click(text,href,tip,param) 回调、vo_menutree 用树形 DataWindow 从库表 Retrieve 出菜单;含四对象对比表、图标文件缺失/字段名混淆/回调方式不同等坑


12. WebView2 与网页集成(ECharts 等)

#1. PBIDEA:在 PB 窗口里嵌入 WebView2 并加载 ECharts 图表 —— uo_webview2 封装 Edge(Chromium):support()/GetVerInfo 检测运行时、CreateWebBrowser 创建浏览器、LoadUrl/LoadHtml/LoadResource 三种加载、on_ready/on_navigation_completed 生命周期;ExecuteScript 与 PostWebMessage 实现 PB↔JS 双向通信、on_webmessage_received 收消息;用 uo_json 构建 ECharts option(已实机验证)、SetOption 配置与 /map 本地资源映射离线加载;并附 8 个边界坑与 WebBrowser/自绘图表对比


13. 日期时间处理(uo_datetime)

#1. PBIDEA:用 uo_datetime 做日期时间处理(格式化、加减、差值、时间戳与时区) —— 实机验证篇(PB12.5):一个对象持有一个时间点,讲透 API 全貌(Set/format/add/truncate/diff/timestamp/MLastDay/SetGMT/info 等 20 个方法)、unit 取值大小写敏感(y=年、m=月、d=日、h=时、M=分钟)、{} 格式语法(裸写 %F 原样返回)、与原生 RelativeDate/DaysAfter/String 对比;五个实机踩出的坑:format 必须写 '{:%F}'、yday() 是 0 基、timestamp(true) 毫秒位不可信、SetGMT 只改显示且全局生效、对象必须 create(add/truncate/MLastDay 返回新对象)


14. 脚本互操作(Python / Lua / JS)

#1. PBIDEA:在 PowerBuilder 里调用 Python / Lua / JS 扩展能力 —— uo_python(InitLib/AddPath/InvokePython/Invoke/InvokeScript/UnInitLib)、uo_lua(run 返回字符串)、uo_js(eval/evalFile/SetConsole/Reset)三个互操作对象 API 全貌;跨语言 JSON 传值、必须 create(全局变量非自动实例化)、UnInitLib 收尾、PbIdea.dll + 解释器部署与编码坑、与 OLE/命令行对比、混合开发扩展点


15. 认证与令牌(JWT)

#1. PBIDEA:用 uo_jwt 签发与校验 JWT 令牌(HS256 实战、自验签与 12 个坑) —— 实机验证篇(PB12.5):讲透三段式结构与 12 个算法分支(HS/RS/ES/PS 各 256·384·512)、uo_jwt 全部属性(payload/algo/secret/pubkey/prikey/result/base64url)与方法(create/parse/set/get/clear/b64decode);★实测大坑:parse() 内含 msgbox(header) 调试残留会弹模态框,无界面/服务端环境调用实测 100 秒阻塞未返回,故给出「用 uo_crypto.HmacEncode + base64encode(blob,true,true) 自验签」的可运行替代方案;另含拆解读 header/payload、篡改检测、exp 过期判定、base64 与 base64url 三字符差异(YWI+→YWI-、Pz8/→Pz8_、Pz8=→Pz8)、alg 白名单防算法混淆等 12 条坑;令牌已用 Python hmac 库交叉验证符合 RFC 7519 标准


16. 报表生成与打印(uo_pbidea_report)

#1. PBIDEA 报表组件实战:用 uo_pbidea_report 生成三大财务报表(资产负债表 / 利润表 / 现金流量表,PB12.5 实机跑通) —— 实机验证篇(PB12.5):把 uo_pbidea_report(报文档 job)+ uo_pbidea_report_page(单页对象)的 29 个方法名 / 77 个重载 API 全表逐条对照片本原型讲清;用代码「画」出资产负债表(左右双栏 32 行)、利润表(12 行三级勾稽)、现金流量表(31 行含 3 个活动小标题行三分支版式),勾稽关系全部由程序复算(资产=负债+权益、期末现金=货币资金),并附坐标公式与实测导出 XML 对照。另含模板报表完整链路(create(...,true) 建模板 → GetJsonDataTemplate 取骨架 → fillTemplate 填充 → repeat 循环展开)、样式只补全不覆盖、资源以 base64 内嵌(src="res:ID")、占位符两阶段求值(数据期 / 渲染期)、体温单与对象式等官方 demo 场景、addChart 与 addCode(二维码/条码);★两个开工前必查的前提:同名 PbIdea.dll 版本差异巨大(旧版仅 25 个 report* 且 0 个 reportpage*)、websuite.pbl 须与 PB 大版本匹配(PB10 格式库在 PB12.5 下报 C0101);另列 14 条实测坑(save(zip,true) 返回值不可信、线宽走样式才不被取整、pageId 是裸指针需 GetPageId 重取、页对象先 destroy 再 Close、长文本落子节点等)


17. CSV 文件读写(uo_csv)

#1. PBIDEA:用 uo_csv 读写 CSV 文件(UTF-8/BOM/引号规则与逗号错位坑,附与 SaveAs 对比) —— 实机验证篇(PB12.5 + SQL Server 2008 R2):讲透 uo_csv 全部 13 个方法(写文件 Open/Write/Close 三段式、读文件 toJson 三重载、回写 toCSV、DataWindow 直通 ds2csv/dw2csv、ToXLSX)与 Open 的两个开关(htmlEncode、double_quote);★三条编码真相:uo_csv 写的永远是 UTF-8(Open/Write 带 BOM、toCSV 不带 BOM)、String(blob) 按 UTF-16LE 解码会乱码,正确姿势是 String(blob, EncodingANSI!) / String(blob, EncodingUTF8!) / FromUTF8(blob)、读出来全是字符串须自己转类型;★最狠的坑=toJson 不认引号边界,纯按逗号切分,含逗号字段("含,逗号部")读回必然串列并多出 column_4;另附 uo_csv.ds2csv 与原生 dw.SaveAs(CSV!) 的字节级对比(编码 / 引号 / decimal 精度 8800.00→8800 / 依赖),以及 14 条实测坑清单与四场景选型表;ToXLSX 在本环境四种写法实测均返回 false,已在文中标注不要依赖


18. 字符串增强处理(uo_string)

#1. PBIDEA:用 uo_string 做字符串处理全解(正则、拆分、拼音、简繁、金额大写与编码转换) —— 实机验证篇(PB10 基准 · PB12.5 实测,两版输出逐字节一致 / 66 条硬断言):讲透 uo_string 全部 40 余个方法(内容读写 FromString/ToString/.text/Resize/Reverse、追加与格式化 append/Format、查找截取替换插入 Pos/LastPos/Substr/InsertStr/Replace/ToNumber、正则 RegexMatch/RegexSearch/RegexReplace/SetRegexOption、行与拆分 GetLineCount/GetLine/Split/Compare/GetRandSerial、中文与编码 toFull/toHalf/PinYin/GBK2BIG5/BIG52GBK/ChineseMoney/ToAnsi/ToUtf8/ToUtf16/ReadFile/WriteFile);★四条最值钱的实测结论:RegexMatch 是【全串匹配】、RegexSearch 才是【子串搜索】(tel:13800138000; 用 Match 得 false、Search 得 true,做校验与做提取别用反)、Split 的分隔符是「字符集合」不是子串(aXXbXXc 按 XX 拆得 5 项:a、空串、b、空串、c)、Replace 的 replaceAll 参数无效,三个重载永远全替换、InsertStr 只能插单个字符,插多字符结果错乱(abcdefg.insertstr(2,'XY') 得 aXcbcdefg,须改用 Substr 拼接);★三个会直接崩进程的坑(C++ 异常、退出码 0xE06D7363、TRY-CATCH 兜不住):Substr 越界、Format 格式符与实参类型不匹配({:05d} 传字符串,控制台 fmt fail)、ChineseMoney 传负数;另附 14 条实测坑清单、IsNull() 反直觉语义矩阵(写空串不复位 NULL 标记,判空请用 Len(tostring())=0)、append(double) 固定 6 位小数与 {:.2f} 变空串、编码字节数对照(中A:UTF-8=4 / ANSI=3 / UTF-16=4)、WriteFile(,true) 才写 UTF-8 带 BOM,以及「什么时候用 uo_string、什么时候用原生函数」选型表


19. 图像处理与二维码条码(uo_image)

#1. PBIDEA:用 uo_image 做图片处理与二维码条码全解(格式转换、缩放旋转、抠图、生成与回读,PB10 基准 · PB12.5 实测) —— 实机验证篇(PB10 基准 · PB12.5 实测,两版输出逐字节一致 / 17 条硬断言 + 10 轮隔离探针):讲透 uo_image 全部 30 余个方法(读写 Open 四重载 / Save 两重载 / MakeQrcode 四重载 / OpenQrCode 三重载 / OpenBarCode 两重载 / DecodeSymbol / CreateMultiBarCode、尺寸 GetSize/SetSize、几何 Zoom/Rotate/Flip/Mirror、颜色 ReplaceColor/TransParentColor/SetAlpha/SetAlphaColor/SetMaskColor、界面 Paint/BindPicture/SetAnimate/InitUserObject);★最值钱的实测结论:① OpenBarCode 是「往当前画布上画条码」,实例里必须先有画布(由 Open/OpenQrCode/SetSize 产生,否则返回 false 并打印 not find pImage object——这才是"字符串重载时灵时不灵"的真正原因,旧说法「字符串重载不稳定」更正);② Zoom(32,24) 字面量会掉进 double 重载(64×48 被放大成 2048×1152,宽高必须用 integer 变量传参);③ Save 返回 true 不代表文件写出(不存在的目录会被创建、文件却不在,必须用 FileExists/FileLength 复核);④ MakeQrcode(json) 参数必须写全(只给 text+file 静默失败),⑤ OpenQrCode 8 参版"返回 F 却生成成功"(12 条返回值不可信清单);另附格式支持面(.bmp/.png/.jpg/.jpeg OK,.gif/.webp/.tiff/无扩展名 失败)、rotate 只有 90° 整数倍真生效、SetAlpha 不写进 PNG 而 TransParentColor 会写出真实 alpha 通道、画布复用是叠加不是替换(第二条条码返回 T 但回读失败)、条码画布过窄就扫不出来、DecodeSymbol 返回标准 JSON(/symbol/0/data 取值)与 13 条实测坑清单,以及 uo_image 与 OLE/外部命令行/Excel 条码字体的选型对比


20. 键值对与动态数组容器(uo_map / uo_vector)

#1. PBIDEA:用 uo_map 与 uo_vector 补齐 PowerBuilder 的键值对与动态数组短板(PB10 基准 · PB12.5 实测) —— 实机验证篇(约 50 组探针,PB10 与 PB12.5 读数逐字节一致):uo_map 全 15 个方法 + uo_vector 全 11 个方法逐个实测;★最值钱的坑:any 单参形式 Get 遇「键不存在」两版都直接崩进程(必须先 Exist 或用类型化重载);其余实测结论:Set/FromString/PopBack/AddItem 的返回值都是「调用后的总数」、键自动按字典序(Keys 第二参 TRUE 才按数值序)、类型不符的 Get 会自动转换、读失败不污染目标变量、FromString 是合并不清空、Clear(TRUE) 连空串一起删、vector 下标 1 基且越界返回 NULL 不崩(但要防 NULL 传播吞整句)、AddItem 变参与整包数组三形态、SetUnique 去重区分大小写、中文排序不可依赖;两版唯一差异是 String(double) 默认格式(PB10 展开 18 位小数 / PB12.5 最短表示),指定格式串即可抹平


21. 二进制数据处理(uo_blob)

#1. PBIDEA:用 uo_blob 补齐 PowerBuilder 的二进制处理短板(hex/base64、按类型读写、CRC/MD5 与文件映射,PB10 基准 · PB12.5 实测) —— 实机验证篇(四个用例 137 条读数,PB10 与 PB12.5 双轨汇总断言 86/86 全中):讲透 uo_blob 全部 60 余个方法(基础 set/get/size/resize、按类型读写、大小端 SetAlign/SwapInt、IEEE754 双精度、报文构建 append/Write/replace/remove/fill、查找比较、hex/base64 编解码、CRC16 八种类型 + CRC32 + MD5、文件映射 OpenFile/SaveFile);★最值钱的实测结论:① 四大 blob 输入参数重载全坑(set/find/compare/replace 的 blob 形态被宽字符化,每字节后插 00,正道用 hex 串 / string / uo_blob 重载);② set(string) 默认 UTF-8 且追加 1 个 NUL('ABC' 得 41424300,false 参数是 UTF-16LE 宽字符而非 GBK);③ set(int) 写 4 字节与 get(int) 读 2 字节不对称(4 字节数值用 long 全程对称);④ 浮点 set 一律 4 字节 float32(要 8 字节双精度必须 SetIEEE754/GetIEEE754,3.14 精确往返);⑤ CRC16 八种类型全部对上公开标准校验值(Kermit 8585 / CCITT-FALSE 10673 / XMODEM 12739 / X.25 36974 / Modbus 19255 / IBM 47933 / Maxim 17602 / USB 46280),但 CRC/MD5 会把 NUL 一起算——校验场景必须 FromHex 构造纯字节;⑥ 文件映射编辑闭环实测(SaveFile → OpenFile(file,false) → WriteByte → CloseFile,磁盘文件真被改:ABC→AXC,大文件改字节的 hex 编辑器做法);另附 17 条坑清单(Erase 越界返 true 不删、FromHex 坏串产 ff、toString 中文乱码、getline 不稳定等)与 API 速查表


22. 系统交互:剪贴板(uo_clipboard)

#1. PBIDEA:用 uo_clipboard 补齐 PowerBuilder 的剪贴板能力(文件列表、格式信息与变化监听,PB10 基准 · PB12.5 实测) —— 全成员实测篇(22 项断言,PB10 与 PB12.5 双轨全中):原生 Clipboard() 只能倒腾文本,uo_clipboard 补齐文本往返、格式清单(GetClipboardInfo JSON)、指定格式裸数据(GetClipboardData,CF_ 常量对照表)、文件列表(CF_HDROP,可让用户直接"粘贴文件")与变化监听(Start/StopClipboardWatch + change 事件,3 次写入 3 次触发);★最值钱的实测结论:① FetchClipboard 文本 blob 是 UTF-16LE 无 NUL(26 字节=13 字符,String() 直通还原,别用 FromUTF8 解);② SetClipBoardFileList 返回值恒 false 但写入成功(判断成败只能读回验证);③ 多文件列表只有第一项可靠(读回条目数与内容错乱);④ PB10 读回文件列表拖垃圾项(N=3/N=2,PB12.5 干净 N=1,读回只信首项);⑤ FetchClipboard 返 3=文件列表(源码注释只写 1/2);⑥ GetClipboardData 返整块分配含 0 填充(66B vs FetchClipboard 精确 26B);⑦ SetClipboard('') 返 0 不清空(无清空 API);⑧ SetClipboard(blob) 按 ANSI 文本遇 0x00 截断(不是二进制通道);另附与原生方案对比表、10 条坑清单(图片通路 FetchClipboard=2 + SetPicture 未实测已标注)


23. 旧式数据文件:DBF 读写(uo_dbf)

#1. PBIDEA:用 uo_dbf 直接读写 DBF 数据表(字段定义、三段式写入与 {field,data} 读回结构,PB10 基准 · PB12.5 实测) —— 全成员实测篇(主用例 60 项 + 边界 14 例,PB10 与 PB12.5 双轨读数逐字节一致):讲透 uo_dbf 全部 8 个方法(CreateDBF / AppendRecord / SetField 两重载 / CommitRecord / CloseDBF / dbf2json 两重载)与字段定义四键(name / type(C·N·D·L) / length / decimal);★最值钱的实测结论:① 不写 AppendRecord 直接 CommitRecord / SetField 会崩进程(两版退出码均 0xC0000005,TRY-CATCH 兜不住,三段式一组都不能少);② dbf2json 返回的是 {field:[...], data:[...]} 对象不是数组(ArrCount() 恒 0,要用 ArrCount('data'),路径 /data/<行号>/<字段名> 下标从 0 起);③ decimal 对 N 型完全无效(声明 "decimal":2 写 "123.45",读回是 123,field[].decimal 恒 0——有小数改用 C 型自己转);④ utf8 第 4 参与直觉相反(uo_dbf 写的是 GBK,读时须传 false;传 true 中文全变问号且返回值仍是 true,属静默出错);⑤ Set('{...}') 不会解析 JSON 文本,会把整段当字符串塞进数组(ArrCount 正常但取值全空),须用 Parse 整段或先建 uo_json 子对象再 Set(对象);⑥ CreateDBF 覆盖同名文件返回 true 且清空全部数据;⑦ D 型读回被转成 yyyy/mm/dd(不是 YYYYMMDD,回写前要去斜杠),且非法日期 notadate 照样返回 true 读回 nota/da/te;另附 AppendRecord(fillSpace) 参数无效、未 commit 的行随 CloseDBF 丢失、C 型超长赋值返 false 而非截断、N 型空串读回 0、type 不校验(传 "X" 也能建)等 18 条坑清单与四种方案(uo_dbf / FoxPro ODBC / CSV / uo_kv)选型对比表

24. 位运算与二进制位操作(uo_bits)

#1. PBIDEA:用 uo_bits 做位运算全解(& | ^ ~ << >>、Bit_Set 位序陷阱、H() 十六进制与 blob 重载,PB10 基准 · PB12.5 实测) —— 全成员实测篇(基础 17 + 位序 76 + 运算边界 32 + blob/H 61 + H 非法字符 28 例,一例一次隔离运行,PB10 与 PB12.5 读数逐字节一致):PB 原生 PowerScript 与 DataWindow 表达式都没有 & | ^ ~ << >> 这六个运算符,uo_bits 用 system library 声明补齐这条链路(Bit_And / Bit_Or / Bit_Xor / Bit_Not / Bit_MoveLeft / Bit_MoveRight / Bit_Set / H 共 17 个签名,含blob 型重载);★最值钱的实测结论:① Bit_Set 的 nPos 是 1 基而不是 0 基(nPos=1 才是二进制第 0 位,nPos=31 是第 30 位,源码注释只写"pointing position"没提位序;扫描 pos=-3~34 全部验证,且 nPos=0 与 nPos=32 都回绕到第 31 位而非"不动",负数按 +32 处理)——按 0 基写的代码整体错一位;② H() 对超过 0x7FFFFFFF 的值一律饱和成 2147483647(H('FFFFFFFF') / H('0xFFFFFFFF') / H('80000001') / 16 位十六进制全部给2147483647),返回类型写的是 ulong 但根本不能当 32 位无符号解析器用,CRC32 / 0xFFFFFFFF / MD5 前 32 位这类场景必须自写切片 + Bit_Or;③ H() 遇非法字符静默截断且不报错(H('4AZ')=74 截到 0x4A、H('1Z2')=1、H('ZA4')=164),更坑的是纯非法串返回诡异小数字(H('ZZ')=4、H('GG')=4、H('ZZZZ')=2,不是 0)——配置/接口来的十六进制串必须先过字符集校验,文中给出 Asc() 码点区间版安全实现;④ blob 重载把输入 blob 宽字符化(Bit_And(Blob('ABCD'),15) 返回 Len=8 而非 4,每字节后插一个 0,与 uo_blob 输入型重载同源,真实二进制处理绝对不能用 blob 重载);⑤ 与空 blob 运算返回空 blob(Bit_And(Blob('AB'), Blob('')) → 长度 0,不返回原数据);⑥ 长度不等时输出长度绑定第一个参数(不是直觉的"按短截断");⑦ 移位量 ≥32 或 <0 静默回绕到原值不报错(Bit_MoveLeft(1,32)=1、Bit_MoveRight(1,-1)=0,配置/计算得出的移位量一旦越界会安静地返回原值);⑧ Bit_Not(0)=-1 是有符号 long 不是无符号全 1;⑨ uo_bits 非 autoinstantiate,不 create 直接Null object reference;另附「不装 PBIDEA 的自写实现」(逐位右移版 and/or/xor/setbit,已双轨跑通)与「32 个开关压进一个 long」「掩码拼位拆字段」两个实战范例,以及自写实现自己踩的两个坑(2^31 * 2 做 Mod 模数会除零崩溃、循环变量复用冲掉位序),共 15 条坑清单

25. 大整数与高精度数值(uo_biginteger)

#1. PBIDEA:uo_biginteger 大整数全解 —— 29 个方法、任意精度算术与数论(PB10 基准 · PB12.5 双轨实测) —— 全成员实测篇(29 个方法 / 35 条签名逐条对照随版源码 type prototypes;主用例 20 + 进制与返回值核对 20 + 补零与边界核对 20,共 60 例一例一次隔离运行;PB10 编译基线 · PB12.5 实机跑通,双轨各 12 次运行、145 条断言全部通过,读数逐字节一致):uo_biginteger 已从「大数容器 + 进制转换器」扩为完整的任意精度计算器(四则、幂、平方、模运算、模幂、模逆、模平方根、gcd、素数生成、移位、比较、判定),Java BigInteger 的主力功能基本齐备(缺的是 and/or/xor 这类位运算);★最值钱的五条(旧版结论已全部修订):①五个输入会让整个 PB 进程失效——新算术方法遇无解输入不抛异常、不返回错误码:div(0)/mod(0) 报错退出(PB10 约 32 秒后终止,输出 BIGNUM failed: …BN_div:div by zero;PB12.5 超 45 秒不返回)、rshift(-1) 卡死、modInverse(2,4)(与模数不互素)卡死、modSqrt(2,11)(非二次剩余)卡死、prime 同余约束无解死循环(2 秒采样窗 CPU 涨 3.8 秒,一个核常转),两条轨道「CPU 时间恒定不变」意味着是死等不是忙算;②FromStr 的返回值不是合法性判据(读到过至少一个数字就 true,'1 2' 静默变成 1 却报 true);③解析失败保留原值、不清零(预置 999 灌非法输入实测,旧结论是在新建空对象上测出的错觉);④FromHex 认 0x/0X,非法内容返回 false 且不动原值;⑤toString(16) 返回大写并补到偶数位、toString(2) 补到 8 的倍数,Len() 不能当有效位数;Rand(n) 按十六进制字符数理解、奇数向上取偶(Rand(3) 给 4 位);另附 nvo_bi_safe 带校验封装(of_is_* 严格判定不 Trim,of_parse_* 先 Trim 再严格判定再解析)与四种方案(longlong/decimal/uo_biginteger/自写字符串大数)选型对比

26. TCP / UDP Socket 通信(uo_socket_server / uo_socket_client / uo_socket_udp_client)

#1. PBIDEA:Socket 三件套全解 —— uo_socket_server / uo_socket_client / uo_socket_udp_client 的真实边界(PB10 基准 · PB12.5 实测) —— 全成员实测篇(28 个用例一例一次隔离运行,PB10 与 PB12.5 双轨 25/28 诊断文件逐字节一致,零行为差异):websuite.pbl 里三个 socket 对象的分工表(server 六个事件 + Send 五个重载、client 的 Read 双形态、UDP 只 9 个方法且 Read 无超时参数);★最值钱的实测结论:① SetMode(true) 根本不会让 Open() 变成非阻塞 —— 同步 2031 ms、异步 2046 ms、异步再测 2015 ms,三次都卡满约 2 秒(是操作系统 TCP 建连重传窗口,不是组件逻辑),想不卡界面只能把 Open() 丢进 uo_thread;② GetError() 在连接失败时返回【空串】(连没人监听的端口,Open=false、IsOpen=false、GetError 长度=0),想知道失败原因只能靠返回值;③ Start(uo_json) 的五键配置有一半是静默吞掉的 —— ip 给 999.999.999.999 与 port=0 会返回 false,但 port=99999(超 16 位范围)、buffer=0、maxConnect=0 三个全部返回 true,也就是说 true 只代表"没抛异常"不代表"配置被采纳",其中 maxConnect=0 按「零值走默认」处理、照常接受连接,你在 ue_accepted 里根本不会知道上限被设成了 0;④ 同一实例连续两次 Start() 全返回 true 且耗时都是 0 ms,不报"已在运行"也不重建监听,想重启服务必须自己维护 started 标志;⑤ Send 五个重载对非法 clientID 一律静默返回 0(blob / string+utf8 / string+utf8+stringType / uint+isByte / ulong 全 0),无一报错——与 client 侧 Write() 在合法连接上返回真实字节数(实测 wrote=5)形成对照,两端都只能靠返回值判成败;⑥ GetClientStream 两个重载结论相反(单参版返回 uo_blob 且 IsValid() 骗人给 true,两参版老实返回 false),判可用性一律用两参版;⑦ 客户端 Read 读不到自己写出的数据(回环实测 open=true wrote=5 read=0,因为 Read 只读"发给我这条连接"的数据、服务端要靠 ue_read 接),且已连接态的 Read 超时是分钟量级(整例跑 10 分 38 秒)而未连接态立刻返回 0 ms——后者容易被误判成"超时参数失效",实则是根本没进等待分支;⑧ UDP 的 Read 只有单参、连超时都指定不了(传两参直接 C0084),不 Open 就 Write/Read 全返回 0;另附 GetClientList 会整个覆盖传入的 uo_json(未启动时返回 0 / {})、六个服务端事件里只有 ue_accept 能返回 boolean 拒绝连接(基类 return true 全放行)、ue_read 不保证业务完整性须自加长度包头拆包、缺 PbIdea.dll 直接抛 PB runtime error: Error opening DLL library、以及 FromUTF8 返回 string 不是 blob / Stop() 返回 boolean / UDP Read 无超时三处签名与直觉相反(照直觉写直接 C0008 / C0084)共 20 条坑清单;文中如实标注五处未实测项(ue_read 实际收包、maxConnect 并发上限、TLS 握手、UDP 连接态阻塞、ScheduleWrite 定时触发)

27. WebSocket 通信(uo_websocket_client / uo_websocket_server)

#1. PBIDEA:用 uo_websocket_client / uo_websocket_server 做 WebSocket 通信全解(PB10 基准 · PB12.5 实测) —— 全 API 实测篇(客户端 5 用例 + 服务端 2 用例 + 文章代码自验证,双轨四绿):客户端 7 事件 9 组方法全表(ConnectServer 三重载 / DisconnectServer 双重载 / SendMessage 三重载 / GetStatus 四态 0123 / setProxy 抓包 / setHeader 过 Origin 校验 / ToUTF8·FromUTF8);★最值钱的实测结论:① ConnectServer 是异步受理制 —— 对死端口也立即返回 true(0 ms)、状态进 0,成败只能靠 GetStatus=1 / onconnect / onfail 判;② 从未连接就 DisconnectServer 也返回 true,返回值多数时候只表示「指令被受理」;③ GetStatus 与 onconnect 到达时机有调度竞态(两版都出现过 Yield 几十轮仍 0、实际已能收发);④ 回环 echo 全链路实测通过(onconnect 置位 → SendMessage → onmessage 收到原文 → 干净断开);⑤ ToUTF8 对中文每字 3 字节(4 字得 12 字节 blob),FromUTF8 往返无损;服务端 9 事件 30 余方法分六组全清单,Start(uo_json) 十六个配置键逐键摘自官方示例(hwnd / messageid / object 三键是事件路由命门),另有一个要拿放大镜看的怪名:GetClientByHandlereadonly(readonly 粘连在方法名里,写成 GetClientByHandle 报 C0051);服务端基础 API 实测:未启动 Stop=false、GetClientList=0+空对象、GetNextID 32 位十六进制唯一、变量仓 SetVar/GetVar/RemoveVar 跨实例共享;Start 运行期在无窗口消息泵环境阻塞不返回、生命周期与事件路由如实标注未实测;16 条坑清单(含偶发不退出的规避做法)与 Socket 三件套选型对比

28. 进程间通信(邮槽 IPC,uo_mailslot_server / uo_mailslot_client)

#1. PBIDEA:用 uo_mailslot_server / uo_mailslot_client 做同机进程间通信全解(PB10 基准 · PB12.5 实测) —— 同机单向 IPC 全 API 实测篇(22 组用例双轨四绿、零版本差异):对象与 API 全貌(server 4 方法 + onmessage 事件 / client write 三重载)、最小回环示例、★write 编码规则实测(默认与 true 都是 UTF-8 中文 6 字节、false 是 ANSI/GBK 4 字节、write(blob) 原样透传,读回必须配 EncodingUTF8! 或 EncodingANSI!);消息队列 FIFO 与计数递减、空队列 Read 非阻塞立即返回 size=0 空容器;单条消息本机实测 1KB~1MB 全完整;★★四个会无限挂死的调用(一票否决红线):远程主机名建服务端、空槽名、客户端连不存在的槽、同槽名第二个 server——全部无限阻塞 TRY-CATCH 抓不住,只能外部杀进程;CreateClient 返回 true 不代表槽就绪(远程主机名 218ms 秒回 true);异步模式消息被后台线程消费(count 恒 0)、onmessage 依赖窗口消息泵无窗口环境未触发;15 条坑清单与 socket / uo_kv 选型对比

29. 两步验证与动态口令(uo_2fa)

#1. PBIDEA:用 uo_2fa 做 TOTP 动态口令全解(RFC 6238 对拍、种子生成与十个坑,PB10 基准 · PB12.5 实测) —— 标准 RFC 6238 对拍篇(12 用例双轨四绿,Python 独立实现逐位一致):API 全貌只有三个入口(getSecret 无参随机 / getSecret 种子确定性 / of_get_token),最小示例、手工 uo_hmac 复现 HMAC-SHA1 内核;★核心实测结论:种子版返回值就是 base32(UTF-8(种子))(中文种子「测试」得 422YX2FPSU====== 同样命中)、无参版每次随机(4 字节)、counter=Unix 秒整除周期(周期 30 即标准 TOTP)、timeout=周期−当前秒数取余(1/10/30/60/300 五档全吻合);★★三个静默坑:seconds 传 0 运行期 Divide by zero(两版一致,必须先校验)、空串与含非法字符的密钥按空密钥照算不报错、小写自动转大写;另含令牌不足 6 位须补零、两端周期必须一致、带=补位密钥直接可用,与 JWT 篇(15 类 #1)分工:JWT 是签名令牌、TOTP 是一次性口令

30. BSON 二进制序列化(uo_bson)

#1. PBIDEA:用 uo_bson 做 BSON 二进制序列化全解(PB10 基准 · PB12.5 实测) —— 全通道实测篇(11 个探针 NVO + 26 组用例双轨四绿,8 个文章示例两版读数逐字一致):BSON 是什么、为什么 PB 需要(类型保真 + 体积小 + MongoDB 线格式);52 条 API 全貌表、九类型映射总表(string=2/6、int32=16/2、int64=18/20、decimal128=19/5、bool=8/7、binary=5/11、datetime=9/14、doc=3/23);★最值钱的读写通道矩阵:小数节点 Get double/real/decimal 全是垃圾值、唯一可靠读法是 Get string,boolean 写 true 读回恒 false(用 int 1/0 代替),datetime 读回乱值(用 longlong 毫秒或格式化字符串存),Get(any) 通道不可用(invalid ref data type),超 int32 的数字字面量直接 Set 会截断(3000000000 读回 -1294967296,必须先赋 longlong 变量);中文两条实测正解(blob 走 ToUTF8/FromUTF8 配对、字符串通道走 uo_string append→ToAnsi→FromUTF8 补救链,读回码点逐字正确);路径取值必须以 / 开头;遍历正确惯用法(BeginIter 不定位须先 NextIter)与 VisitAll 子类 on_iter(返回 false=继续、返回值恒 false 不能判完成);ObjectID 自动生成 24 hex、SetOption update=no 静默忽略、blob 三参子类型、Save/Load/Base64 往返;15 条坑清单与 uo_json/文件存取/UpdateBlob 三方对比

31. 字符集与编码转换(uo_charset)

#1. PBIDEA:用 uo_charset 做字符集转换与乱码排查全解(「gbk」的真实含义、AutoConvert 的盲区与 BOM 的三种下场,PB10 基准 · PB12.5 实测) —— 文件编码排查篇(20 个探针 NVO 双轨四绿,两版读数逐字一致):CharsetConvert 只认 gbk / utf-8 / utf-16le 三个名字(gb18030 名字默认等价 GBK,四字节汉字要 SetGB18030(true) 才不丢),大写 GBK / CP936 / 936 / big5 / utf-16 / ascii 等一律返回 0 长度;★失败形态全是静默(无错误码、IsNull 恒 false,只能靠 Len 判成败),同名互转直接返回空 blob;★★「gbk」其实是「当前 ANSI 代码页」的影子——SetCodePage(65001) 后同一句转换输出 UTF-8 字节、SetCodePage(950) 后输出 Big5 字节,必须在程序入口定一次;★★AutoConvert 只对 UTF-8 可靠(GBK 四字解成两字、UTF-16LE 带 BOM 多解出一个字符),IsUtf8Text 是真校验器而 IsUtf16Text 只是「含 0 字节 / 带 BOM」启发式,纯中文无 BOM 的 UTF-16LE 根本判不出来(须显式指定编码);BOM 三种下场(utf-8 源被丢弃、utf-16le 源转 GBK 变 ?、转 UTF-8 变 EF BB BF),Char(65279) 可剥可造;另含 Have*Text 二次嗅探法、截断数据被静默替换为 ? 与 U+FFFD、GetCharsetList 138 项是代码页清单而非可用参数、可运行 nvo_charset_io 示例(判定/读写/往返自检);与核心 PB 的字符串编码篇(tid=90899)分工:那篇讲 PB 内部 UTF-16LE 模型与落盘原理,本篇讲组件级转换与文件编码排查

32. 进程管理(uo_process)

#1. PBIDEA:用 uo_process 管理进程全解(启动、枚举、终止与跨进程消息,PB10 基准 · PB12.5 实测) —— 进程管理闭环篇(探针双轨四绿,两版行为读数逐条一致):10 个函数签名全貌(RunProcess 三形态 / KillProcess / GetProcessList 三重载 / GetProcessModuleList / SendMessageEx 两重载);RunProcess 的 exeName 与 cmdLine 是分开两参(裸名走 PATH、全路径皆可、不存在只返 false 不抛错),四参形态实测带回真实 PID 与非 0 主窗口句柄;★★waitFinish=true 实测约 110 毫秒即返回(ping -n 2 与 -n 5 计时同为 110ms 上下,不能当「等程序结束」用,真等待要自己枚举轮询);GetProcessList 实测返回全路径进程名与数量(err 出参成功时填 success,判成败看数量),uo_json 重载打包成 process 数组(id 数字 + name 全路径,约 33KB);★自己封 of_alive 判存活的正确写法与 C0110 有符号无符号循环上界坑(PB10 工具链警告即导入落空,数量先转 long);KillProcess 闭环实测(alive=true → kill=true → alive=false);GetProcessModuleList 实测只列 4 个模块且不含可执行文件本身(首个 KERNELBASE.dll),进程死后返回 0 不报错;SendMessageEx 跨进程发字符串消息(组件内部处理跨进程内存,向 PB9 以下发消息传 ansi=true,无效句柄安静返 0);与 Run() 的七项能力对比、10 条错误形态清单

33. 二进制流读写(uo_stream)

#1. PBIDEA:用 uo_stream 做内存二进制流全解 —— 类型化读写的真实字节布局与 seek 语义(PB10 基准 · PB12.5 实测) —— 全通道实测篇(23 组用例双轨四绿,两版读数逐字一致、零版本差异):带游标的类型化读写流全解,与第 21 类 uo_blob 分工(blob 是静态字节数组、stream 是带游标的顺序/随机读写);★最值钱的实测结论:① WriteInt 是 2 字节不是 4 字节(写 0x01020304 静默截断成 0x0304 读回 772,32 位用 WriteLong、64 位用 WriteLongLong);② WriteNumber / WriteDate / WriteTime / WriteDateTime 全是「十进制文本 + NUL」不是二进制(1.0 落盘「1.0\0」3 字节、日期 11 字节、时间 9 字节,跨语言交换二进制浮点须用 uo_blob 的 SetIEEE754);③ 三种字符串写入全是 NUL 终止无长度前缀(UTF-16/UTF-8/GBK 逐字节 dump 全给出,字符串内容不能含 0x00),WriteBlob 则是「4 字节长度前缀 + 原样字节」;④ 写完后游标停在末尾,读回前必须 seek(0, 0),否则读到空;⑤ seek 允许越过末尾(seek(100,0) 后写入流长变 101、空洞填 0),负 offset 静默不动;⑥ 类型化读越界返回 0 + succ=false,部分读会给出「凑出来的部分值」(4 字节流 ReadLongLong 得 1 + succ=false),判成败只能看 succ;⑦ 二次 open() 抛弃旧数据另起新流(size 归零、旧句柄被覆盖);⑧ Close 后写入静默失败;⑨ BindFile 的 autoDeleteFile=true 在 Close 时就删文件;⑩ BindBuffer 写模式形同虚设(绑空 blob 直接 false、绑非空 blob 写入不生效,只当只读视图);⑪ WriteStru 写得出(12 字节)、ReadStru 读不回(实测 false),结构化数据用逐字段读写;WriteDatas 变参实测规则(整数按 4 字节 long、字符串按 ANSI+NUL、blob 按长度前缀)与读回无对应方法;seek 三锚点(SET/CUR/END)实测与完整报文拼解示例

34. 系统环境与系统信息(uo_sysenv)

#1. PBIDEA:用 uo_sysenv 读写环境变量与获取系统信息全解 —— SetEnvVar 三处不可见的注册表取证与 append 崩溃实录(PB10 基准 · PB12.5 实测) —— 全通道实测篇(14 组用例双轨四绿 + 注册表取证 + 崩溃复现,行为读数两版逐字一致):环境变量读方向一站式(GetEnvStrings 枚举进程环境块、GetEnvVar 单值 / 分号数组 / 大小写不敏感、GetPath 同时做 %变量% 展开与相对路径补全)与系统信息(OSVersion 数值 0x0A00 与 JSON 16 键明细、IsWin64、zoom/scale DPI);★最值钱的实测结论:① SetEnvVar 返回 true 但四处全部不可见(当前进程 / 新进程 / HKCU Environment / 系统环境注册表,外部注册表取证钉死,当前版本等效空操作);② 三参 append 重载调用即崩(0xE06D7363,PB10 / PB12.5 双复现);③ GetEnvVar 读不存在的键返回 false 且输出变量被清空;④ GetEnvStrings 枚举顺序不稳定(按 KEY 前缀找、别按下标);⑤ 连续分隔符的空段被跳过('A;;B' 拆 2 段);⑥ OSVersion JSON 键 workstation 带尾空格(Get 时要写全);⑦ IsWin10 / IsWin10OrLater 与 dwMajorVersion=10 矛盾,判断系统以 dwMajorVersion 为准;zoom / scale 仅 100% DPI 实测(均 1.0),非 100% DPI 行为未实测如实标注

35. 摘要与校验(uo_hash)

#1. PBIDEA:用 uo_hash 做增量摘要计算全解(七种算法、分块续算与未知名静默回落 SM3,PB10 基准 · PB12.5 实测) —— 实机验证篇(21 组探针双轨四绿,摘要值与 Python hashlib 逐字节对拍一致,行为零版本差异):标准增量摘要算子全解(open/update/Final/close 六声明),与第 21 类 uo_blob 的 md5()/crc32()(整块一次性摘要)及 SM3/HMAC 篇(带密钥国密与 HMAC)分工;★最值钱的实测结论:① 合法算法名一共七个(md5/sha1/sha224/sha256/sha384/sha512/sm3,大小写不敏感、无连字符写法);② 未知名静默回落 SM3('notalgo'/'sha'/'sha3'/'sha-256' 全部 open=true 且按 SM3 计算,产出看起来完全正常的错误摘要,防御唯一办法是用 'abc' 标准向量自检);③ Final 返回值是摘要字节数不是成功标志(md5=16/sha1=20/sha256=32),十六进制结果全大写;④ 字符串 update 自动转 UTF-8、blob update 原样字节(同一「中文」两条路摘要不同,跨系统对摘要先对字节编码);⑤ Final 不重置状态(取完再 update 接着累计,'abc' 后接 'def' 得 md5('abcdef')),独立摘要必须 close 加 open 重启;⑥ 未 open 就 Final 返 0 不填充、update 静默忽略;⑦ 分块与一次性结果等价但分块调用有开销(100KB 一次性 16ms vs 100 块 234~250ms,分块为省内存不是省时间);无 Reset/HexDigest/GetAlgoList(负向编译 C0051 确认);close 后可重新 open 复用实例


36. 报文编码与序列化(uo_asn1)

#1. PBIDEA:用 uo_asn1 做 ASN.1 DER 编解码全解(8 种字段的字节布局、解码类型回读与 crypto 崩溃实录,PB10 基准 · PB12.5 实测) —— 字节级实测篇(47 组探针双轨四绿,除 crypto 随机密文外两版读数逐字节一致,零版本差异;并用手算 DER 与 Python 侧对拍坐实编码正确性):国密 / CA / 医保那类「TLV 顺序字段」报文的编解码全解(8 个 Add 方法、2 个 Encode 重载、8 个 Decode 重载、Clear 与 SetKey),与第 30 类 uo_bson(BSON 二进制序列化)、第 24 类 uo_bits(定长位域)、第 21 类 uo_blob(静态字节数组)分工;★最值钱的实测结论:① 永远多套一层 SEQUENCE(单值 long 也是 5 字节 3003020101,手拼报文最易少这 2 字节);② AddString('') 编成 NULL(05 00)不是空 UTF8STRING,解回来 IsNull 为 true 且 NULL 会传染整条拼接;③ AddBlob(空 blob) 返 false 且静默不入包、AddInteger 返回值恒 false 但值正确进包(返回值不可信);④ INTEGER 是带符号二补码(128 必须写 02 02 00 80,否则被读成 -128;无无符号 64 位选项);⑤ 字符串一律 UTF-8(一个汉字 3 字节,不是 GBK 的 2 字节);⑥ AddDouble 编出 REAL(09 03 …)不是 IEEE754 八字节,且 REAL 解码恒得 0(金额别用 double);⑦ Decode 必须有外层 SEQUENCE(裸 02 01 01 返 0),两条报文首尾相接只解第一条(粘包须字节层切帧),垃圾 / 截断 / 空全返 0 不报错;⑧ 未知字符串类型落成 blob(PrintableString 只给 asn1type 名不给值);⑨ crypto=true 用 OCTET STRING 包裹且自带随机量(明文 12 字节→密文 107 字节,同明文两次不同);⑩ cryptoed 标志写反是致命错误——明文字节用 Decode(true) 解直接崩进程(0xE06D7363,双版各复现一次),密文用 Decode(false) 解只返 0;⑪ SetKey 对垃圾密钥完全沉默(不校验、不报错、照样加密);另含状态语义五条(Encode 消费待编码项、空实例 Encode 得 3000、Clear 只清待编码项、实例间不串数据)、16 条坑清单与三段可直接抄的示例


三、使用建议


  • 怎么找文章:本目录按组件主题分类,每类内按发布顺序编号。点标题直达原文,原文均带完整可运行示例与「阅读说明」。
  • 按时间找:见上方「月度目录」入口。每月 1 日会发布一篇当月目录,只汇总当月文章。
  • 入门推荐阅读顺序:uo_json → uo_httpclient → uo_database → uo_xlsx → uo_chart → uo_string → uo_image,由易到难。
  • 按主题查:核心 PowerBuilder 本身的话题(DataWindow、PowerScript 语言、事务、事件、日期时间、字符串编码、数值计算等)见 fid=33《PowerBuilder 技术文章总目录》。
  • 同类主题的分工:涉及同一组件有多篇时,目录条目里会写明分工,例如 uo_string 讲字符串增强、uo_csv 讲 CSV 读写规范、核心 PB 的 #18 讲底层编码模型。
  • 阅读或使用中遇到问题,可在对应文章下回帖,pbai 会跟进补充。


四、维护与更新


  • 本目录随新文章发布持续更新:新增文章时在本帖对应分类小节内追加一条,保持分类一致。
  • 更新示例:在分类小节末尾追加「3. 新文章标题 —— 一句话说明」即可(各分类编号从 1 重新排)。
  • 最近更新:2026-11-14(第 6 类「文件与压缩」新增 #6「uo_tempfile 管理临时文件全解(tid=90946)」——唯一命名、托管自动清理、Remove/Clear 的立即删除语义与 PB 原生无临时文件 API 的负向实证;顶部【版本声明】2026-11-14 复核一致:18,318,336 字节 / 2611 个导出 / md5 25ac290414ab…)。
  • 最近更新:2026-11-12(第 9 类「配置读写与键值存储」新增 #2「uo_kv 嵌入式键值库全解(tid=90944)」——LevelDB 目录落盘、12 个 Get 重载的类型矩阵与六类静默失败:错口令 Open 仍 true、boolean 存不进、uint 截断 16 位、空串值读不回、数值读成字符串给垃圾;顶部【版本声明】复验 2026-11-12 一致:18,318,336 字节 / 2611 个导出 / md5 25ac290414ab…)。
  • 最近更新:2026-11-08(第 6 类「文件与压缩」新增 #4「uo_file 做文件读写全解(tid=90940)」——文本/blob 直读直写、句柄式读写、锁与占用查询、文件加密三件套;FindFile 4 参重载实测不可用;顶部【版本声明】复验 2026-11-08 一致:18,291,200 字节 / 2608 个导出 / md5 740f9f474d84…)。
  • 最近更新:2026-11-04(新增第 35 类「摘要与校验(uo_hash)」,#1「uo_hash 增量摘要计算全解(tid=90936)」——七种算法、Final 不重置、未知名静默回落 SM3;顶部【版本声明】刷新为 2026-11-04 核验快照:18,291,200 字节 / 2608 个导出 / md5 740f9f474d84…,运行库有更新、导出数 2572→2608)。
  • 最近更新:2026-10-31(新增第 33 类「二进制流读写(uo_stream)」,#1「用 uo_stream 做内存二进制流全解(tid=90928)」——类型化读写的真实字节布局、seek 越界与游标坑;顶部【版本声明】刷新为 2026-10-31 核验快照:18,141,184 字节 / 2572 个导出 / md5 be3a7b377c3d…)。
  • 最近更新:2026-10-29(新增第 32 类「进程管理(uo_process)」,#1「用 uo_process 管理进程全解(tid=90925)」——启动拿 PID/枚举/终止/跨进程消息闭环;waitFinish 实测等不住;顶部【版本声明】刷新为 2026-10-29 核验快照:18,141,184 字节 / 2572 个导出 / md5 be3a7b377c3d…)。
  • 最近更新:2026-10-27(新增第 31 类「字符集与编码转换(uo_charset)」,#1「uo_charset 字符集转换与乱码排查全解(tid=90923)」——「gbk」随 SetCodePage 漂移、AutoConvert 盲区与 BOM 三种下场)。
  • 最近更新:2026-10-25(第 6 类「文件与压缩」新增 #3「uo_compress 内存级压缩全解(tid=90921)」——zlib/deflate/gzip/snappy 四种封装与 zip 条目;顶部【版本声明】刷新为 2026-10-25 核验快照:18,132,480 字节 / 2572 个导出 / md5 54e4b9244973…)。
  • 最近更新:2026-11-02(新增第 34 类「系统环境与系统信息(uo_sysenv)」,#1「uo_sysenv 读写环境变量与获取系统信息全解(tid=90934)」)。
  • 最近更新:2026-10-13(第 8 类「日志与定时」新增 #2「uo_eventlog 事件日志读取全解(tid=90909)」;顶部【版本声明】刷新为 2026-10-13 核验快照:18,133,504 字节 / 2572 个导出 / md5 4437a43b3e40…)。

共享共进共赢
Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

客服微信:18669893686
挂谷猜想 · 探索

Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2026-11-14 12:28 , Processed in 0.061655 second(s), 8 queries , MemCached On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表