本帖最后由 王之能够21wz 于 2026-8-4 22:34 编辑
我发现我编译出了问题,不知道是怎么回事?经常出错,我又是一个代码小萌新,不知道怎么去修改代码
https://gitee.com/Qeaget/auto-edit-lib
MSB600“CL.exe”已退出,代码为-1073741515。
似乎是编译器问题?使用V60 AutoEditLib.vcxproj 内的 D:\易语言5.9\sdk\cpp\elib 要改成实际的路径 感兴趣的大佬可以去看看,给点建议,自绘组件太难了{:7_452:}
以下是md文件 我复制了过来O.o
自动获取编辑 支持库 (AutoEditLib)
项目概述
本支持库为易语言提供一个名为"实时编辑框"的组件,实现文件实时绑定、MD5变化检测、自动编码转换、自绘UI等高级功能。
技术原理
DeepSeek+doubao+Qwen+me
1. 易语言支持库原理
- 支持库本质是符合易语言规范的Windows DLL,后缀为
.fne
- 必须导出
GetNewInf() 函数,返回 LIB_INFO 结构指针
LIB_INFO 包含:库信息、数据类型表、命令表、常量表等
- 窗口组件通过
LIB_DATA_TYPE_INFO 注册,包含属性表、事件表、方法表
- 组件创建通过
PFN_CREATE_UNIT 回调,属性读写通过 PFN_GET_PROPERTY_DATA / PFN_NOTIFY_PROPERTY_CHANGED
2. 自绘组件原理
- 子类化(Subclassing):通过
SetWindowLongPtr(GWLP_WNDPROC) 替换编辑框窗口过程
- 消息拦截:拦截
WM_PAINT、WM_ERASEBKGND、WM_CTLCOLOREDIT 等消息
- 双缓冲绘制:内存DC + 兼容位图,先离屏绘制再
BitBlt 到屏幕,防止闪烁
- GDI+绘图:使用GDI+实现透明背景、渐变、圆角、抗锯齿文本
- Unicode内核:内部统一使用UTF-16LE存储,显示时自动适配系统编码
3. 文件实时监控原理
- MD5比对:定时读取文件计算MD5,与缓存的MD5比较判断文件是否被修改
- 线程监控:独立工作线程轮询文件状态,不阻塞UI线程
- 内外修改区分:内部修改时设置标志位,跳过MD5检测;外部修改触发事件
- 编码自动检测:通过BOM检测 + 统计分析识别UTF-8/GBK/UTF-16等编码
- 自动转码:读取时统一转为Unicode,写入时按原编码写回
文件结构出了异常!请忽略
组件属性列表
| 属性名 |
类型 |
说明 |
| 绑定文件 |
文本型 |
绑定的文件路径 |
| 直接读取 |
逻辑型 |
外部修改时是否直接覆盖内容 |
| 直接写入 |
逻辑型 |
内部修改时是否直接写入文件 |
| 内容 |
文本型 |
当前编辑框文本内容 |
| 字体名称 |
文本型 |
自定义字体名称 |
| 字体大小 |
整数型 |
自定义字体大小 |
| 字体粗细 |
整数型 |
字体粗细(100-900) |
| 文本颜色 |
整数型 |
文本颜色(RGB) |
| 背景颜色 |
整数型 |
背景颜色(RGB) |
| 背景图片 |
文本型 |
背景图片路径 |
| 边框样式 |
整数型 |
0=无边框 1=单线 2=凹陷 3=凸起 |
| 边框颜色 |
整数型 |
边框颜色(RGB) |
| 对齐方式 |
整数型 |
0=左对齐 1=居中 2=右对齐 |
| 文件编码 |
整数型 |
只读,当前绑定文件编码 |
| 当前MD5 |
文本型 |
只读,当前文件MD5值 |
组件事件列表
| 事件名 |
参数 |
说明 |
| 被外部修改 |
是否成功(逻辑型) |
文件被外部程序修改时触发 |
| 读取完成 |
是否成功(逻辑型) |
文件读取完成时触发 |
| 写入完成 |
是否成功(逻辑型) |
文件写入完成时触发 |
| 绑定完成 |
是否成功(逻辑型), 编码(整数型) |
文件绑定完成时触发 |
| 内容被改变 |
无 |
编辑内容改变时触发 |
组件方法列表
| 方法名 |
参数 |
返回值 |
说明 |
| 开始监控 |
无 |
逻辑型 |
开始监控绑定文件 |
| 停止监控 |
无 |
逻辑型 |
停止监控绑定文件 |
| 读取文件 |
无 |
逻辑型 |
手动读取绑定文件 |
| 写入文件 |
无 |
逻辑型 |
手动写入内容到文件 |
| 取文件MD5 |
无 |
文本型 |
获取当前文件MD5 |
| 取文件编码 |
无 |
整数型 |
获取文件编码类型 |
编译说明
- 使用 Visual Studio 2008/2010/2019(推荐VS2008兼容性最好)
- 项目类型:MFC DLL 或 Win32 DLL
- 字符集:多字节字符集
- 包含目录:易语言SDK的
sdk/cpp/ELib 目录
- 导出
GetNewInf 函数(通过.def文件)
- 编译输出后缀改为
.fne
- 复制到易语言
lib 目录即可使用
|