YStudio Y++

DLL支持(基础支持库)

Y++ / YStudio 开发文档 · 一点滴

路径:支持库 → 基础支持库 → DLL支持。

硬约束

  1. 扁平命令;地址一律用 长整数 / 整数 传递,没有「指针类型」关键字。
  2. WinAPI 的 int*(32 位出参)用 DLL_整数指针32 + DLL_读整数指针32,不要用 DLL_整数指针(那是 64 位变量址)。
  3. DLL_文本指针W/A 返回的是临时缓冲地址,请在同一次 DLL 调用中使用。
  4. 工程位数必须与 DLL 一致;失败立刻看 DLL_取错误()。
  5. 完整边界对照见 指针/DLL 手册;.yp 声明见 dllapi。

快速开始

长整数 u = 加载DLL("user32.dll")
长整数 fn = 取导出函数(u, "MessageBoxW")
调用函数Ex(fn, 0, DLL_文本指针W("内容"), DLL_文本指针W("标题"), 0)
释放DLL(u)

DLL支持

本分类共 41 条。

DLL_内存加载

  • 签名:逻辑 DLL_内存加载(文本 DLL资源路径, [文本 注册名称=""])
  • 说明:把嵌入 EXE 的资源 DLL 映射到进程内存(不落盘主 DLL)。
  • 参数一│DLL资源路径: 如 :/dll/TrailDLL.dll
  • 参数二│[注册名称]: 默认取文件名

DLL_写出

  • 签名:逻辑 DLL_写出(文本 源, 文本 写出路径, [逻辑 覆盖=真], [逻辑 自动创建目录=真], [逻辑 校验内容=真])
  • 说明:把嵌入资源或磁盘 DLL 写到目标路径(临时文件+原子替换)。
  • 参数一│DLL名或资源路径
  • 参数二│写出路径
  • 参数三│[覆盖=真]
  • 参数四│[自动创建目录=真]
  • 参数五│[校验内容=真]

DLL_写整数

  • 签名:逻辑 DLL_写整数(整数 指针, 整数 值, [整数 字节数=4])
  • 说明:向地址写整数。
  • 参数一│指针
  • 参数二│值
  • 参数三│[字节数=4]: 1/2/4/8

DLL_写文本A

  • 签名:逻辑 DLL_写文本A(整数 指针, 文本 内容, [整数 最大字节数=0], [整数 代码页=0])
  • 说明:按代码页写入窄文本。0=系统 ACP,65001=UTF-8。
  • 参数一│指针
  • 参数二│内容
  • 参数三│[最大字节数=0]
  • 参数四│[代码页=0]

DLL_写文本W

  • 签名:逻辑 DLL_写文本W(整数 指针, 文本 内容, [整数 最大字符数=0])
  • 说明:写入 Unicode 文本。
  • 参数一│指针
  • 参数二│内容
  • 参数三│[最大字符数=0]

DLL_创建整数缓冲区

  • 签名:通用 DLL_创建整数缓冲区([整数 初始值=0], [整数 字节数=4])
  • 说明:创建可传给 DLL_调用 的整数输出缓冲区。
  • 参数一│[初始值=0]
  • 参数二│[字节数=4]

DLL_创建文本缓冲区A

  • 签名:通用 DLL_创建文本缓冲区A([文本 初始文本=""], [整数 最大字节数=260], [整数 代码页=0])
  • 说明:创建窄文本缓冲区对象。
  • 参数一│[初始文本=”“]
  • 参数二│[最大字节数=260]
  • 参数三│[代码页=0]

DLL_创建文本缓冲区W

  • 签名:通用 DLL_创建文本缓冲区W([文本 初始文本=""], [整数 最大字符数=260])
  • 说明:创建 Unicode 文本缓冲区对象。
  • 参数一│[初始文本=”“]
  • 参数二│[最大字符数=260]

DLL_参数

  • 签名:通用 DLL_参数(文本 类型, 通用 值, [整数 代码页=0])
  • 说明:包装 DLL 参数类型(文本W/A、整数指针、地址、.yt 名等)。
  • 参数一│类型: 文本W/文本A/utf8/整数指针/地址/…
  • 参数二│值
  • 参数三│[代码页=0]

DLL_取缓冲区指针

  • 签名:整数 DLL_取缓冲区指针(通用 缓冲)
  • 说明:取安全缓冲区底层地址。
  • 参数一│缓冲

DLL_取错误

  • 签名:文本 DLL_取错误()
  • 说明:最近一次 DLL 支持库错误信息。

DLL_回调

  • 签名:通用 DLL_回调(子程序指针 回调, [文本 约定="stdcall"])
  • 说明:包装回调地址并指定 cdecl/stdcall。通常直接传 &函数名 即可。
  • 参数一│回调: 如 &热键回调(子程序指针)
  • 参数二│[约定=stdcall]

DLL_填充内存

  • 签名:逻辑 DLL_填充内存(整数 指针, 整数 字节值, 整数 字节数)
  • 说明:按字节填充内存。
  • 参数一│指针
  • 参数二│字节值
  • 参数三│字节数

DLL_字节集指针

  • 签名:长整数 DLL_字节集指针(字节集 变量)
  • 说明:取字节集缓冲首地址,专供 DLL 入参/出参。
  • 参数一│变量: 字节集变量

DLL_整数指针

  • 签名:长整数 DLL_整数指针(整数 变量)
  • 说明:取整数变量地址(Y++ 整数为 64 位)。WinAPI 的 int* 请用 DLL_整数指针32。
  • 参数一│变量: 整数变量

DLL_整数指针32

  • 签名:长整数 DLL_整数指针32([整数 初值=0])
  • 说明:准备 WinAPI int* 出参:TLS 环形 int32,写入初值后返回地址。
  • 参数一│初值: 写入缓冲的初始整数(可省略)

DLL_文本指针A

  • 签名:长整数 DLL_文本指针A(文本 文本)
  • 说明:把文本转为 UTF-8 窄串并返回地址。
  • 参数一│文本: 源文本

DLL_文本指针W

  • 签名:长整数 DLL_文本指针W(文本 文本)
  • 说明:取文本的宽字符缓冲区地址(LPCWSTR)。
  • 参数一│文本: 宽字符文本

DLL_申请内存

  • 签名:整数 DLL_申请内存(整数 字节数)
  • 说明:申请进程堆内存,返回地址。
  • 参数一│字节数

DLL_读整数

  • 签名:整数 DLL_读整数(整数 指针, [整数 字节数=4])
  • 说明:从地址读整数。
  • 参数一│指针
  • 参数二│[字节数=4]

DLL_读整数指针32

  • 签名:整数 DLL_读整数指针32(长整数 指针)
  • 说明:读回 DLL_整数指针32 返回的 int* 当前值。
  • 参数一│指针: DLL_整数指针32 的返回值

DLL_读文本A

  • 签名:文本 DLL_读文本A(整数 指针, [整数 最大字节数=0], [整数 代码页=0])
  • 说明:按代码页读取窄文本。
  • 参数一│指针
  • 参数二│[最大字节数=0]
  • 参数三│[代码页=0]

DLL_读文本W

  • 签名:文本 DLL_读文本W(整数 指针, [整数 最大字符数=0])
  • 说明:读取 Unicode 文本。
  • 参数一│指针
  • 参数二│[最大字符数=0]

DLL_读缓冲区整数

  • 签名:整数 DLL_读缓冲区整数(通用 缓冲, [整数 字节数=4])
  • 说明:从整数缓冲区读值。
  • 参数一│缓冲
  • 参数二│[字节数=4]

DLL_读缓冲区文本A

  • 签名:文本 DLL_读缓冲区文本A(通用 缓冲, [整数 最大字节数=0], [整数 代码页=0])
  • 说明:从文本缓冲区A读 Y++ 文本。
  • 参数一│缓冲
  • 参数二│[最大字节数=0]
  • 参数三│[代码页=0]

DLL_读缓冲区文本W

  • 签名:文本 DLL_读缓冲区文本W(通用 缓冲, [整数 最大字符数=0])
  • 说明:从文本缓冲区W读 Y++ 文本。
  • 参数一│缓冲
  • 参数二│[最大字符数=0]

DLL_调用

  • 签名:通用 DLL_调用(文本 DLL文件, 文本 函数名, [文本 调用约定="winapi"], [文本 返回类型="通用"], ...)
  • 说明:通用 DLL 导出调用入口。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[调用约定=winapi]
  • 参数四│[返回类型=通用]
  • 参数五│…参数

DLL_调用数组

  • 签名:通用 DLL_调用数组(文本 DLL文件, 文本 函数名, [文本 约定="winapi"], [文本 返回类型="通用"], 数组 参数)
  • 说明:用数组组织参数后调用 DLL。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[约定=winapi]
  • 参数四│[返回类型=通用]
  • 参数五│参数数组

DLL_调用整数

  • 签名:整数 DLL_调用整数(文本 DLL文件, 文本 函数名, [文本 调用约定="winapi"], ...)
  • 说明:DLL_调用 的整数返回简化版。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[约定=winapi]
  • 参数四│…

DLL_调用整数数组

  • 签名:整数 DLL_调用整数数组(文本 DLL文件, 文本 函数名, [文本 约定="winapi"], 数组 参数)
  • 说明:数组参数 + 整数返回。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[约定=winapi]
  • 参数四│参数数组

DLL_调用文本

  • 签名:文本 DLL_调用文本(文本 DLL文件, 文本 函数名, [文本 调用约定="winapi"], ...)
  • 说明:调用返回文本地址的导出并读为 Y++ 文本。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[约定=winapi]
  • 参数四│…

DLL_调用文本数组

  • 签名:文本 DLL_调用文本数组(文本 DLL文件, 文本 函数名, [文本 约定="winapi"], 数组 参数)
  • 说明:数组参数 + 文本返回。
  • 参数一│DLL文件
  • 参数二│函数名
  • 参数三│[约定=winapi]
  • 参数四│参数数组

DLL_释放内存

  • 签名:无 DLL_释放内存(整数 指针)
  • 说明:释放 DLL_申请内存 得到的地址。
  • 参数一│指针

DLL_释放缓冲区

  • 签名:逻辑 DLL_释放缓冲区(通用 缓冲)
  • 说明:释放安全缓冲区。
  • 参数一│缓冲

FreeLibrary

  • 签名:逻辑 FreeLibrary(长整数 模块)
  • 说明:同「释放DLL」。
  • 参数一│模块

LoadLibrary

  • 签名:长整数 LoadLibrary(文本 路径)
  • 说明:同「加载DLL」。
  • 参数一│路径

加载DLL

  • 签名:长整数 加载DLL(文本 路径)
  • 说明:LoadLibrary:加载 DLL,返回模块句柄(长整数)。
  • 参数一│路径: 如 user32.dll 或完整路径

取导出函数

  • 签名:长整数 取导出函数(长整数 模块, 文本 导出名)
  • 说明:GetProcAddress:取导出函数入口地址。
  • 参数一│模块: LoadLibrary/内存加载句柄
  • 参数二│导出名: 如 MessageBoxW

置DLL约定

  • 签名:逻辑 置DLL约定(文本 注册名称, 文本 约定)
  • 说明:为注册名称设置默认调用约定:winapi/stdcall/cdecl。
  • 参数一│注册名称
  • 参数二│约定

调用函数Ex

  • 签名:通用 调用函数Ex(通用 函数名或地址, ...)
  • 说明:扩展动态调用:按 Y++ 函数名或原生函数地址调用(最多约 16 参)。裸文本默认 ACP;宽/UTF-8 用 DLL_参数。
  • 参数一│函数名或地址: 文本函数名,或 LoadLibrary+取导出函数 地址
  • 参数二│其余参数: 可用 DLL_参数 / &回调 / 缓冲区

释放DLL

  • 签名:逻辑 释放DLL(长整数 模块)
  • 说明:FreeLibrary:释放由加载DLL/内存加载得到的模块。
  • 参数一│模块: 模块句柄

易错对照

错误 正确
用 DLL_整数指针 当 Win int* 改用 DLL_整数指针32 + 读回
取文本指针地址 当 LPCWSTR 用 DLL_文本指针W 或 .yp 文本
加载后不看 DLL_取错误 失败立刻查错误文本
x86 进程加载 x64 DLL 工程位数与 DLL 一致

相关

指针/DLL 手册 · DLL 声明(.yp) · 指针操作 · 第三方 DLL