赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
本帖最后由 紫苏 于 2010-9-19 03:51 编辑
回复 禾西 的帖子
这个应该是因为 RM 在初始化的时候枚举系统字体表中的字体并加以保存,所以在 RGSS10*J.DLL 加载后添加的字体资源并不能识别。重启之后会重新枚举字体,所以就找到了
首先参考夏娜的这个补丁工程:
http://rpg.blue/thread-118633-1-1.html
原理是自建一个 DLL,动态链接原来的 RGSS10*J.DLL,并把里面的函数原封不动地导出一份。这样做了之后就有了一个入口点 DllMain,而这个入口点在 RGSS10*J.DLL 函数调用之前会先行调用的(当然实际上是 DLL 加载到、分离出进程、线程的时候都会调用),所以在这里进行的初始化就能保证在 RGSS 的初始化之前进行
在夏娜的 VS 工程的 Entry.cpp 里,DllMain 函数内添加 AddFontResourcesEx 那一行:
- case DLL_PROCESS_ATTACH:
- if (!LoadRGSS102J())
- {
- // 加载原RGSS102J.DLL失败的情况
- MessageBoxA(NULL, "加载RGSS102J.DLL失败!", "错误", 0);
- return FALSE;
- }
- AddFontResourceEx(TEXT("jmmcs.ttf"), FR_PRIVATE, 0);
- break;
复制代码 ttf 那里是字体资源文件名。release、优化编译链接,然后把工程的 .ini 文件里的 lib 改为刚生成的 RGSSPatch.DLL
AddFontResourcesEx 这个函数只允许让 RM 的进程使用该字体资源,其它程序无法访问,且在进程终止时会自动释放。貌似现有的字体脚本用的是 AddFontResources,这样任何程序都能访问,而且程序终止后仍然会保留在系统字体表中,直到当前系统会话期结束为止,除非调用了 RemoveFontResources。同时脚本又没有安装字体的提示和选项,还 CopyFile 把字体复制到系统字体目录,相信这在不少人眼中看来都是流氓行径吧。复制到字体目录也就罢了,却又没有修改注册表,这样就处在一个既不能算临时也不能算永久资源的半吊子状态,实在是有点……o.o |
评分
-
查看全部评分
|