工程树 资源/ 下的文件可在 Release 打包时写入 exe(嵌入表 g_yppEmbeddedRes)。路径在代码里统一写成 :/相对资源路径。
右键「嵌入 exe」
- 仅 Release 配置生效(Debug 菜单灰掉,始终旁路到 exe 旁)。
- 打包侧无扩展名白名单:任意已加入资源目录的文件(js / html / txt / dll / 图片 / db / yss…)均可嵌入。
- 文件夹可整夹嵌入;对「📂 资源」根节点嵌入 = 整树嵌入(工程文件里记为空串,勿写成无效的
".")。 - 「批量嵌入 exe…」可多选。
- 「添加资源文件…」过滤器已含常见类型;其它扩展名用 所有文件 (.)。
外拷可运行(单 exe)
Release 且勾选嵌入后,整工程可只拷一个 exe(第三方运行库例外见下):
- 资源走
:/…(嵌入优先,无旁路文件也能跑) - 主窗
.yss→g_yppEmbeddedFormYss;控件表 / YSS 扩展 →g_yppEmbeddedFormControls/g_yppEmbeddedYssExt - 次级窗(
载入)→g_yppEmbeddedSecondaryForms[]:每窗含 controls / launchMeta / yssExt / yss,运行时优先读嵌入,失败再回退旁路 - Release 发布目录不再旁路拷贝
form_controls_*.bin、form_launch_*.txt、form_yss_ext_*.bin(Debug 仍拷贝) - 第三方如
libmysql.dll会放到发布目录旁(未进嵌入表时须一并拷贝)
编译后可检查 发布/.../Release/._cache/embedded_payload.cpp:
g_yppEmbeddedResCount是否 > 0(资源树)g_yppEmbeddedSecondaryFormCount是否等于次级窗数量
运行时 :/ 读取
| 类型 | 嵌入后能否用 :/… |
说明 |
|---|---|---|
| 图片 / YSS / 图标 | ✅ | YsRes_* / 控件属性 |
| 文本 / json / 读文件 / 到字节集 | ✅ | 走嵌入表或旁路文件 |
JS类.加载(":/…") |
✅ | 读嵌入字节再执行 |
加载DLL(":/…") |
✅ | 先落地临时文件再 LoadLibrary;失败则内存加载 |
DLL_内存加载 / DLL_写出 |
✅ | 原本就支持资源 URL |
SQLite类.打开(":/…") |
✅ | 物化到临时文件后打开;写入不会改回 exe 内嵌数据 |
| 浏览器控件打开 html | ✅(有限) | 物化为临时 file://;页面内相对路径资源可能失效,建议内联或绝对 :/ |
推荐写法
JS类 eng
eng.加载(":/scripts/sign.js")
长整数 m = 加载DLL(":/dll/plugin.dll")
SQLite类 db
db.打开(":/data/demo.db", 真) ' 嵌入库建议只读
读文件(":/cfg/app.json")
DLL 依赖较多时,也可 DLL_写出(":/dll/x.dll", 临时目录) 再 加载DLL。