改变 vfp 可执行文件的运行库位置和名称

 

今天分析了一下如何将 vfp exe 运行时要使用的运行库更名的问题。下面是分析结果,以 vfp9 + 简体中文 Windows 系统为例。

我们知道,编译成 exe vfp 程序要加载两个运行时库,它们的缺省名称为 vfp9r.dll vfp9rchs.dllvfp 在正常情况下查找和加载这两个 dll 的方式是这样的:

1. 加载 vfp9r.dll:首先查当前路径,然后查注册表中定义(位置: HKEY_CLASSES_ROOT/VisualFoxProRuntime.9/Shell/Open/Command,通常是 C:/Program Files/Common Files/Microsoft Shared/VFP/vfp9r.dll),最后是 Windows 系统文件夹。

2. 加载成功的 vfp9r.dll 根据 Windows 当前使用的语言确定要使用的语言资源文件 vfp9r???.dll,对于简体中文,使用 vfp9rchs.dll

3. 加载 vfp9chs.dll:首先查当前路径,然后是 Windows 系统文件夹和 path 环境变量指定的路径, 最后是注册表(同上)。

假定我们将这两个运行库文件更名为 aaa.dll aaa.chs.dll,并放到 c:/windows/system32 下的话,如何让我们的 exe 仍能正常运行,又不影响其他 vfp 程序正常运行呢?

首先,要使我们的 exe 不使用 HKCR/VisualFoxProRuntime.9/Shell/Open/Command 中的运行库缺省定义。先在注册表中增加一项我们要使用的运行库定义:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT/MyRuntime/Shell/Open/Command]
@="C://WINDOWS//system32//aaa.dll"

打开记事本,贴入上面的内容并保存为 my.reg,然后双击这个文件导入到注册表中。下面修改 exe 让它来读取这个设置。

使用任何16进制编辑器(例如:UltraEdit),在 exe 中查找 VisualFoxProRuntime.9,找到后将其改为我们刚定义的 MyRuntime(注意修改后的串不要超过原串长度,若长度小于原串的话,注意尾部要填一个 00,如图一)

图1

保存修改后的 exe 文件,现在我们的 exe 运行时将加载这个 aaa.dll 而不会再找 vfp9r.dll 了。

接下来我们要让 aaa.dll 去找 aaa.chs.dll 而不找原来的 vfp9rchs.dll,仍用16进制编辑器,这次打开 aaa.dll,查找 VisualFoxproRuntime.9/Resources,看到紧接着的 VFP9R%s 了吗?就是它,将它改为 aaa.%s,由于我们的 aaa.%s vfp9r%s 少一个字符,所以后面也要填一个 00,如图二:

图2

好了,保存好修改后的 aaa.dll。就这么简单,现在这个 exe 将加载 c:/windows/system32/ 中的运行库 aaa.dll aaa.chs.dll

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值