You are on page 1of 13

-----------------------------------------------

VFP C++编译软件(VFP C++ Compiler)常见问题


2020 年 01 月
-----------------------------------------------
深圳市百誉佳软件技术有限公司版权所有,2000-2020

一、试用版下载:

1、下载 VFP C++ Compiler [DEMO VERSION 2020]:


http://www.baiyujia.com/f_downloadproc_vc.asp

2、请使用 7-Zip 解压文件,下载 7-Zip:


http://www.7-zip.org

二 、“C/C++编译错误”原因分析:

1、对于 Visual C++ 6.0(或 Visual Studio 98),请安装 Visual C++ 6.0 Processor Pack。

请先安装 Visual C++ 6.0 SP5,然后安装 Visual C++ 6.0 Processor Pack,然后安装 Visual
C++ 6.0 SP6。

如果未安装 Visual C++ 6.0 Processor Pack,请选择数据对齐:1 字节。

2、C/C++编译器文件选择 FOXRUN8\MAKE.BAT(Visual C++ 8.0)时:

由于 Visual C++ 8.0(及以后版本)在 Windows XP(及以后版本)下更改了 VC 运行库的部署方式:


以前版本一般放在 C:\Windows\System32 文件夹下即可,现在需要安装 Microsoft .NET Framework 2.0
或 Microsoft Visual C++ 2005 Redistributable Package,VC 运行库放在 C:\Windows\Winsxs 文件夹下,
可以多个版本并存。

Visual C++ 8.0 编译生成的应用程序发布时一般也需要安装 Microsoft .NET Framework 2.0 或


Microsoft Visual C++ 2005 Redistributable Package。如果希望编译成“绿色软件”,需要把
MICROSOFT.VC80.CRT.MANIFEST、MSVCR80.DLL 拷贝到应用程序所在文件夹下,而且 VC 运行库
版本号要正确,否则不能启动应用程序。

对于 VFP 开发的应用程序,使用 Visual C++ 8.0 编译器或 Visual C++ 7.0/6.0 编译器没有大的
区别。如果我们熟悉.NET 开发工具,可以使用 Visual C++ 8.0 编译器,生成的应用程序发布时请附带
Microsoft .NET Framework 2.0 或 Microsoft Visual C++ 2005 Redistributable Package。如果
我们对.NET 开发工具不太熟悉,建议使用 Visual C++ 7.0/6.0 编译器生成应用程序。

C/C++编译器版本和 VFP 版本并无直接联系。换言之,使用 VFP 6.0 开发的应用程序,可以使用


Visual C++ 8.0 编译器;使用 VFP 8.0 开发的应用程序,也可以使用 Visual C++ 6.0 编译器。

三、编译速度:

测试 1:AMD Sempron 2600+ 1.6G、512MB 内存、Windows 2000 环境下,编译生成 20MB 的 EXE 文件


和 20MB 的 DLL 文件需要 10 分钟左右。

测试 2:Intel Core 2 Duo P7350 2.0G、2GB 内存、Windows XP 环境下,编译生成 20MB 的 EXE 文件


和 50MB 的 DLL 文件需要 30 分钟左右。

测试 3:Intel Core 2 Duo P7350 2.0G、2GB 内存、Windows XP 环境下,编译生成 60MB 的 EXE 文件


和 300MB 的 DLL 文件需要 6 小时左右。

Visual C++ 6.0/7.0/8.0/9.0/10.0 编译器的编译时间比约为 9.5:1.0:1.5:1.2:1.2,因此,


建议使用 Visual C++ 7.0 编译器以获得较快的编译速度。

试用版未做优化处理,正式版本可以提高 1 倍以上的编译速度。

四、运行库文件参考:

┌─────┬──────┬──────┬───────────────┬───────┐
│ VFP \ VC │ VC 6.0 │ VC 7.0 │ VC 8(9).0 │ VC 10(11,12) │
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP 6.0 │VFP6R.DLL │VFP6R.DLL │VFP6R.DLL │VFP6R.DLL │
│ │VFP6RCHS.DLL│VFP6RCHS.DLL│VFP6RCHS.DLL │VFP6RCHS.DLL │
│ │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │
│ │ │MSVCR70.DLL │MSVCR8(9)0.DLL │MSVCR100.DLL │
│ │ │ │MICROSOFT.VC8(9)0.CRT.MANIFEST│(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP 7.0 │VFP7R.DLL │VFP7R.DLL │VFP7R.DLL │VFP7R.DLL │
│ │VFP7RCHS.DLL│VFP7RCHS.DLL│VFP7RCHS.DLL │VFP7RCHS.DLL │
│ │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │
│ │MSVCR70.DLL │MSVCR70.DLL │MSVCR70.DLL │MSVCR70.DLL │
│ │ │ │MSVCR8(9)0.DLL │MSVCR100.DLL │
│ │ │ │MICROSOFT.VC8(9)0.CRT.MANIFEST│(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP 8.0 │VFP8R.DLL │VFP8R.DLL │VFP8R.DLL │VFP8R.DLL │
│ │VFP8RCHS.DLL│VFP8RCHS.DLL│VFP8RCHS.DLL │VFP8RCHS.DLL │
│ │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │
│ │MSVCR70.DLL │MSVCR70.DLL │MSVCR70.DLL │MSVCR70.DLL │
│ │ │ │MSVCR8(9)0.DLL │MSVCR100.DLL │
│ │ │ │MICROSOFT.VC8(9)0.CRT.MANIFEST│(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP 9.0 │VFP9R.DLL │VFP9R.DLL │VFP9R.DLL │VFP9R.DLL │
│ │VFP9RCHS.DLL│VFP9RCHS.DLL│VFP9RCHS.DLL │VFP9RCHS.DLL │
│ │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │
│ │MSVCR71.DLL │MSVCR71.DLL │MSVCR71.DLL │MSVCR71.DLL │
│ │ │MSVCR70.DLL │MSVCR8(9)0.DLL │MSVCR100.DLL │
│ │ │ │MICROSOFT.VC8(9)0.CRT.MANIFEST│(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP Adv. │VFPAR.DLL │VFPAR.DLL │VFPAR.DLL │VFPAR.DLL │
│ │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │VFPCORE.DLL │
│ │MSVCR71.DLL │MSVCR71.DLL │MSVCR71.DLL │MSVCR71.DLL │
│ │ │MSVCR70.DLL │MSVCR8(9)0.DLL │MSVCR100.DLL │
│ │ │ │MICROSOFT.VC8(9)0.CRT.MANIFEST│(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
├─────┼──────┼──────┼───────────────┼───────┤
│ VFP Adv. │N/A │N/A │N/A │VFPAR.DLL │
│ (x64) │ │ │ │VFPCORE.DLL │
│ │ │ │ │MSVCR100.DLL │
│ │ │ │ │(MSVCR110.DLL)│
│ │ │ │ │(MSVCR120.DLL)│
└─────┴──────┴──────┴───────────────┴───────┘

如果使用 Visual C++ 8.0 编译器,需要把 MICROSOFT.VC80.CRT.MANIFEST、MSVCR80.DLL 拷贝到应用


程序所在文件夹下。

如果使用 Visual C++ 9.0 编译器,需要把 MICROSOFT.VC90.CRT.MANIFEST、MSVCR90.DLL 拷贝到应用


程序所在文件夹下。

其它运行库文件可以拷贝到:
1、应用程序文件夹,
2、或 Windows 系统文件夹,
3、或 C:\Program Files\Common Files\Microsoft Shared\VFP。

重要提示:
1、Visual C++ 10.0 编译生成的软件仅运行于 Windows XP SP2 及以后平台。
2、Visual C++ 11.0 编译生成的软件仅运行于 Windows Vista 及以后平台。
3、Visual C++ 11.0 Update 1 及以后更新编译生成的软件仅运行于 Windows XP SP2 及以后平台。
4、Visual C++ 12.0 编译生成的软件仅运行于 Windows XP SP2 及以后平台。

五 、“<项目名称>.DLL 不是 Visual Foxpro 的 EXE 文件”问题:

参考前述“C/C++编译错误”原因分析。
“<项目名称>.DLL 不是 Visual Foxpro 的 EXE 文件”问题解决方法:

如果使用 Visual C++ 8.0 编译器,需要安装 Microsoft .NET Framework 2.0 或安装
Microsoft Visual C++ 2005 Redistributable Package 或把 MICROSOFT.VC80.CRT.MANIFEST、
MSVCR80.DLL 拷贝到应用程序所在文件夹下。

如果使用 Visual C++ 9.0 编译器,需要安装 Microsoft .NET Framework 3.5 或安装
Microsoft Visual C++ 2008 Redistributable Package 或把 MICROSOFT.VC90.CRT.MANIFEST、
MSVCR90.DLL 拷贝到应用程序所在文件夹下。

六 、“资源文件不匹配”原因分析:

VFP9R.DLL 的搜索顺序:
1、应用程序文件夹,
2、注册表(HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command),
3、Windows 系统文件夹。

VFP9RCHS.DLL 的搜索顺序:
先 LoadLibrary VFP9RCHS,搜索顺序:
1、应用程序文件夹,
2、Windows 系统文件夹,
3、PATH 环境变量指定的文件夹。
如果 LoadLibrary VFP9RCHS 失败,再搜索:
4、注册表(HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command)。

VFP9R.DLL 和 VFP9RCHS.DLL 的搜索顺序不一致,是造成“资源文件不匹配”问题的根本原因。

最常见的情况是:
┌──────────┬──────┬──────┬─────┐
│搜索到 VFP 运行库位置 │ VFP9R.DLL │VFP9RCHS.DLL│ 匹配结果 │
├──────────┼──────┼──────┼─────┤
│应用程序文件夹 │ 1)x │ 1)x │ │
├──────────┼──────┼──────┼─────┤
│注册表 │ 2)ok │ │ │
├──────────┼──────┼──────┼─────┤
│Windows 系统文件夹 │ │ 2)ok │ error │
└──────────┴──────┴──────┴─────┘

即:在注册表搜索到 VFP9R.DLL,但在 Windows 系统文件夹优先搜索到 VFP9RCHS.DLL,


如果这两个文件版本不一致,就会发生“资源文件不匹配”错误!

“资源文件不匹配”问题解决方法:

VFP 安装时默认把运行库文件安装到:
C:\Program Files\Common Files\Microsoft Shared\VFP
建议同时拷贝到:
C:\Windows\System32 文件夹下
以避免可能出现的“资源文件不匹配”问题。

VFP C++编译软件已经把 VFP9R.DLL 的搜索顺序调整为:


1、应用程序文件夹,
2、Windows 系统文件夹,
3、注册表(HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command)。

这样 VFP9R.DLL 和 VFP9RCHS.DLL 的搜索顺序一致,可以避免出现“资源文件不匹配”问题。

七、兼容性问题:

在 Windows 98 上有时出现“API call caused an exception”。

在 Windows 2000 上偶尔出现“API call caused an exception”。

Windows XP:暂未出现错误。

Windows 8.1、Windows Defender,


如果 VFP C++编译软件运行很慢,请设置排除文件夹:
1、VFP C++编译软件安装文件夹(C:\Program Files\Baiyujia VFP C++ Compiler),
2、应用程序文件夹,
3、临时文件夹(C:\Users\xxx\AppData\Local\Temp)。

八、杀毒软件兼容性问题:

如果我们设置:
/VCENCRYPT=OFF 不加密可执行文件
/VCPACKEXE=OFF 不压缩可执行文件
/VFPLIB=OFF 不包含 VFP 运行库
我们可以从 www.virustotal.com 网站得到下面的扫描结果:
┌────────────┬───────────────────────────┐
│ VFP 版本 │ 扫描结果 │
├────────────┼───────────────────────────┤
│ VFP 6.0 │ Clean. │
├────────────┼───────────────────────────┤
│ VFP 7.0 │ WhiteArmor: Malware.HighConfidence │
├────────────┼───────────────────────────┤
│ VFP 8.0 │ Clean. │
├────────────┼───────────────────────────┤
│ VFP 9.0 │ Clean. │
├────────────┼───────────────────────────┤
│ VFP Advanced 32-bit │ Cylance: Unsafe │
├────────────┼───────────────────────────┤
│ VFP Advanced 64-bit │ Cylance: Unsafe │
└────────────┴───────────────────────────┘

如果我们设置:
/VCENCRYPT=ON 加密可执行文件
/VCPACKEXE=OFF 不压缩可执行文件
/VFPLIB=OFF 不包含 VFP 运行库
我们可以从 www.virustotal.com 网站得到下面的扫描结果:
┌────────────┬───────────────────────────┐
│ VFP 版本 │ 扫描结果 │
├────────────┼───────────────────────────┤
│ VFP 6.0 │ Clean. │
├────────────┼───────────────────────────┤
│ VFP 7.0 │ Cylance: Unsafe │
│ │ WhiteArmor: Malware.HighConfidence │
├────────────┼───────────────────────────┤
│ VFP 8.0 │ Ikarus: Virus.Win32.Hezhi │
├────────────┼───────────────────────────┤
│ VFP 9.0 │ Cylance: Unsafe │
├────────────┼───────────────────────────┤
│ VFP Advanced 32-bit │ Cylance: Unsafe │
├────────────┼───────────────────────────┤
│ VFP Advanced 64-bit │ Cylance: Unsafe │
└────────────┴───────────────────────────┘

如果我们设置:
/VCENCRYPT=ON 加密可执行文件
/VCPACKEXE=ON 压缩可执行文件
/VFPLIB=OFF 不包含 VFP 运行库
我们可以从 www.virustotal.com 网站得到下面的扫描结果:
┌────────────┬───────────────────────────┐
│ VFP 版本 │ 扫描结果 │
├────────────┼───────────────────────────┤
│ VFP 6.0 │ Avira: TR/Crypt.XPACK.Gen │
│ │ Cylance: Unsafe │
│ │ Sophos ML: heuristic │
│ │ TheHacker: Posible_Worm32 │
│ │ TrendMicro-HouseCall: PAK_Generic.005 │
│ │ WhiteArmor: Malware.HighConfidence │
├────────────┼───────────────────────────┤
│ VFP 7.0 │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Avira: TR/Crypt.XPACK.Gen │
│ │ Cylance: Unsafe │
│ │ Sophos ML: heuristic │
│ │ TheHacker: Posible_Worm32 │
│ │ TrendMicro-HouseCall: PAK_Generic.005 │
│ │ WhiteArmor: Malware.HighConfidence │
├────────────┼───────────────────────────┤
│ VFP 8.0 │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Cylance: Unsafe │
│ │ Ikarus: Virus.Win32.Hezhi │
│ │ TheHacker: Posible_Worm32 │
│ │ TrendMicro-HouseCall: PAK_Generic.005 │
├────────────┼───────────────────────────┤
│ VFP 9.0 │ Cylance: Unsafe │
│ │ TheHacker: Posible_Worm32 │
│ │ TrendMicro-HouseCall: PAK_Generic.005 │
├────────────┼───────────────────────────┤
│ VFP Advanced 32-bit │ Cylance: Unsafe │
├────────────┼───────────────────────────┤
│ VFP Advanced 64-bit │ Cylance: Unsafe │
│ │ eGambit: Unsafe.AI_Score_81% │
└────────────┴───────────────────────────┘

如果我们设置:
/VCENCRYPT=ON 加密可执行文件
/VCPACKEXE=OFF 不压缩可执行文件
/VFPLIB=ON 包含 VFP 运行库
我们可以从 www.virustotal.com 网站得到下面的扫描结果:
┌────────────┬───────────────────────────┐
│ VFP 版本 │ 扫描结果 │
├────────────┼───────────────────────────┤
│ VFP 6.0 │ AhnLab-V3: Backdoor/Win32.Trojan Horse.C2214714 │
│ │ Cylance: Unsafe │
│ │ Endgame: malicious (high confidence) │
│ │ SentinelOne: static engine - malicious │
│ │ Sophos ML: heuristic │
│ │ WhiteArmor: Malware.HighConfidence │
├────────────┼───────────────────────────┤
│ VFP 7.0 │ AhnLab-V3: Backdoor/Win32.Trojan Horse.C2214714 │
│ │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Cylance: Unsafe │
│ │ Endgame: malicious (high confidence) │
│ │ Sophos ML: heuristic │
├────────────┼───────────────────────────┤
│ VFP 8.0 │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Ikarus: Virus.Win32.Hezhi │
│ │ Sophos ML: heuristic │
├────────────┼───────────────────────────┤
│ VFP 9.0 │ Baidu: Win32.Trojan.WisdomEyes.16070401.9500 │
│ │ Cylance: Unsafe │
│ │ Sophos ML: heuristic │
├────────────┼───────────────────────────┤
│ VFP Advanced 32-bit │ Cylance: Unsafe │
├────────────┼───────────────────────────┤
│ VFP Advanced 64-bit │ Cylance: Unsafe │
└────────────┴───────────────────────────┘

如果我们设置:
/VCENCRYPT=ON 加密可执行文件
/VCPACKEXE=ON 压缩可执行文件
/VFPLIB=ON 包含 VFP 运行库
我们可以从 www.virustotal.com 网站得到下面的扫描结果:
┌────────────┬───────────────────────────┐
│ VFP 版本 │ 扫描结果 │
├────────────┼───────────────────────────┤
│ VFP 6.0 │ Cylance: Unsafe │
│ │ Endgame: malicious (moderate confidence) │
│ │ McAfee-GW-Edition: BehavesLike.Win32.Trojan.wc │
├────────────┼───────────────────────────┤
│ VFP 7.0 │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Cylance: Unsafe │
│ │ Endgame: malicious (moderate confidence) │
├────────────┼───────────────────────────┤
│ VFP 8.0 │ Avast: Win32:Metaphor │
│ │ AVG: Win32:Metaphor │
│ │ Cybereason: malicious.99d263 │
│ │ Cylance: Unsafe │
│ │ Ikarus: Virus.Win32.Hezhi │
│ │ Sophos ML: heuristic │
├────────────┼───────────────────────────┤
│ VFP 9.0 │ Cylance: Unsafe │
│ │ Endgame: malicious (moderate confidence) │
│ │ Sophos ML: heuristic │
├────────────┼───────────────────────────┤
│ VFP Advanced 32-bit │ Clean. │
├────────────┼───────────────────────────┤
│ VFP Advanced 64-bit │ Clean. │
└────────────┴───────────────────────────┘
九、运行速度问题:

通常情况下,运行速度相当于单步运行 VFP 代码速度。

在优化编译的情况下,运行速度接近于 VFP 自然编译运行速度,部分语句(如 x=x+1 等)优化编译后


比 VFP 自然编译运行速度更快。

对于某些不能优化的语句,运行时间与 VFP 自然编译运行时间之比约为 7:1(最坏的情况下)。

如果某段代码编译后运行速度明显下降(如程序启动、初始化部分的代码),而且我们认为运行速度
最重要,这段代码即使被反编译也不会有太大影响,那么我们可以通过设置编译杂注解决这个问题:
* 这里的代码会编译进动态链接库
=[FOXRUN OFF]
* 下面的代码不会编译进动态链接库
……
=[FOXRUN ON]
* 这里的代码会编译进动态链接库

十、绿色软件问题:

如果希望编译成“绿色软件”,请选择“包含 VFP 运行库”。

编译生成的软件只需要<项目名称>.EXE 和<项目名称>.DLL 两个程序文件(及一些数据文件)就可以


在任何电脑上运行(即使那台电脑没有安装 VFP 运行库),也可以直接在 U 盘上运行。

如果使用 Visual C++ 8.0 编译器,需要把 MICROSOFT.VC80.CRT.MANIFEST、MSVCR80.DLL 拷贝到应用


程序所在文件夹下。

如果使用 Visual C++ 9.0 编译器,需要把 MICROSOFT.VC90.CRT.MANIFEST、MSVCR90.DLL 拷贝到应用


程序所在文件夹下。

可以使用 MoleBox 或 Thinstall 打包软件打包<项目名称>.DLL 以及其它文件(如 VFP 运行库文件)到


<项目名称>.EXE 中。

十一、防止反编译问题:

通常,VFP C++编译软件编译生成一个 EXE 文件和一个 DLL 文件。

编译生成的 EXE 文件是可以反编译的,但 EXE 文件中不包含有用的 VFP 源代码,由 C 代码编译生成的


DLL 文件只能反汇编。

如果打开调试模式,FOXRUNPRGTEMP1、FOXRUNVCXTEMP1、FOXRUNSCXTEMP1、FOXRUNFRXTEMP1、
FOXRUNLBXTEMP1 文件夹下的文件就是最终包含在 EXE 文件中的文件,而这些文件基本上不包含有用的
VFP 源代码。换句话说,即使反编译出 EXE 文件中的文件,也没有什么使用价值。
通常,编译生成的 DLL 文件可达数十 MB,其 C 源代码可达数百 MB,反汇编和分析 DLL 文件将是一项
庞大的、耗时的、很可能没有任何结果和意义的任务。

十二、调试模式:

如果打开调试模式,VFP C++编译软件会生成编译日志文件并保留编译中间文件,便于分析查找原因。

编译中间文件包括:

<项目名称>.VCL:编译日志文件(LOG_FILE);
<项目名称>.VCD:字典文件(DICTIONARY_LIST_FILE);
<项目名称>.VCD2:在字符串定界符内的变量名称列表文件(DICTIONARY_LIST_FILE2);
<项目名称>.VCD3:字段或属性名称列表文件(DICTIONARY_LIST_FILE3);
<项目名称>.VCDX:不能编译的变量名称列表文件(DICTIONARY_LIST_FILEX);
<项目名称>.VCN:名称表索引文件(NAME_TABLE_INDEX_FILE);
<项目名称>.VCK:关键字文件(KEYWORDS_LIST_FILE);

<项目名称>$VCV$.TMP:类库、表单路径文件(CLASSLOC_FILE);
<项目名称>$VCM$.TMP:类库、表单代码文件(ALLMETHODS_FILE);
<项目名称>$VC3$.TMP:类库、表单自定义方法、属性名称文件(ALLRESERVED3_FILE);
<项目名称>$VCI$.TMP:类库、表单表单 Init 事件包含 PARAMETERS 语句文件(ALLINITPARA_FILE);
<项目名称>$VCE$.TMP:优化代码文件(EXECUTE_FILE);
<项目名称>$VCN$.TMP:内联函数文件(INLINE_FILE);
<项目名称>$VCN2$.TMP:已编译的内联函数文件(INLINE_FILE2);
<项目名称>$VCINCDATA$.TMP:增量编译数据文件(INCREMENTALDATA_FILE);
<项目名称>$VCINCMEM$.TMP:增量编译内存变量文件(INCREMENTALMEM_FILE);
<项目名称>$VCINCVCF$.TMP:增量编译编译选项文件(INCREMENTALVCF_FILE);
<项目名称>$VCTASKDATA$.TMP:多任务编译数据文件(MULTITASKDATA_FILE);
<项目名称>$VCTASKMEM$.TMP:多任务编译内存变量文件(MULTITASKMEM_FILE);
<项目名称>$VCTASKVCF$.TMP:多任务编译编译选项文件(MULTITASKVCF_FILE);

FOXRUNPRGTEMP<n>\*.*:程序类文件
FOXRUNVCXTEMP<n>\*.*:类库文件
FOXRUNSCXTEMP<n>\*.*:表单文件
FOXRUNFRXTEMP<n>\*.*:报表文件
FOXRUNLBXTEMP<n>\*.*:标签文件

十三、应用程序调试模式:

如果打开应用程序调试模式,VFP C++编译软件编译生成的应用程序运行时会生成运行日志文件,便于
分析查找原因。

应用程序运行日志文件包括:
<项目名称>DEBUG_<计算机名称>.LOG:运行日志文件(APPLICATION_DEBUG_LOG_FILE)。

十四、应用程序错误日志文件:

通常情况下,VFP C++编译软件编译生成的应用程序运行发生错误时仅返回一段代码的最后一个错误信息。
如果打开应用程序错误日志文件,VFP C++编译软件编译生成的应用程序运行发生错误时会生成所有错误
日志文件,便于分析查找原因。

应用程序错误日志文件包括:

<项目名称>ERROR_<计算机名称>.LOG:错误日志文件(APPLICATION_ERROR_LOG_FILE)。

十五、保留字:

如果变量名称与下列保留字(RESERVED WORDS)相同,将不做替换处理:

单个字母名称;
以下划线开头的名称;
以_ACCESS 结尾的名称;
以_ASSIGN 结尾的名称;
VFP 保留字(关键字);
FOXTOOLS.FLL 函数名;
常用 WIN32API 函数名;
DECLARE-DLL 语句申明的 API 函数名(DECLARE_FUNCTION_LIST);
CREATE TABLE|DBF 语句中的字段名称(CREATE_FIELD_LIST);
ALTER TABLE|DBF 语句中的字段名称(ALTER_FIELD_LIST);
GetProfileString、GetPrivateProfileString 语句中的条目名称(PROFILE_KEY_LIST);
EXTERNAL 语句中的变量名称(EXTERNAL_VARIABLE_LIST);
SELECT-SQL 语句中的 AS 字段名称(AS_FIELD_LIST);
项目文件夹及其子文件夹下的文件名(FILENAME);
项目文件夹及其子文件夹下的表文件的字段名称(FIELD_NAME);
项目文件夹及其子文件夹下的数据库中的视图参数名称(DBC_VIEW_PARAMETERS);
项目文件夹及其子文件夹下的配置文件中的条目名称(KEY_NAME_IN_INIFILE);
项目文件夹及其子文件夹下的内存变量文件中的变量名称(VARIABLE_NAME_IN_MEMFILE);
项目中包含的 FXP/APP/EXE 文件中的变量名称(VARIABLE_NAME_IN_APPFILE);
项目中包含的 FXP/APP/EXE 文件中的过程名称(PROCEDURE_NAME_IN_APPFILE);
项目中包含的 FXP/APP/EXE 文件中的类名称(CLASS_NAME_IN_APPFILE);
用户保留字文件(<项目名称>.VCW)中指定的保留字。

十六、编译变量名称:

所谓编译变量名称,是指把变量名称:
x1
x2
替换为:
__VC_A
__VC_B

VFP C++编译软件只编译用等号赋值过的变量名称(例如:x1=123)。

对于<项目名称>.VCD2 文件中列出的替换后可能有问题的语句,例如:
cancelar Caption = "Cancelar"
建议选择“不编译在字符串定界符内的变量名称”,
这样所有的在字符串定界符内的变量名称(包括 cancelar)都不做替换处理。

对于<项目名称>.VCD3 文件中列出的替换后可能有问题的语句,例如:
fld1 ?STR(t1.fld1,10)
建议选择“不编译字段或属性名称”,
这样所有的字段或属性名称(包括 fld1)都不做替换处理。

也可以采用以下解决方法:

1、可以选择“不编译用户保留字文件中指定的变量名称”,
并在用户保留字文件(<项目名称>.VCW)中添加一个用户保留字:cancelar,
这样所有的 cancelar 都不做替换处理。

2、可以在把该控件的 Caption 属性改为"C"+"ancelar",例如:


Caption = ("C"+"ancelar")
该控件的 Caption 属性已无 cancelar,但其它地方的 cancelar 仍将做替换处理。

3、可以选择“仅编译用户变量名称文件中指定的变量名称”,
并在用户变量名称文件(<项目名称>.VCV)中添加需要编译的变量名称。

十七、VFP C++编译软件 32 位版本和 VFP C++编译软件 64 位版本:

1、VFP C++编译软件 32 位版本:


VFP C++编译软件 32 位版本可运行于 32 位或 64 位 Windows。
VFP C++编译软件 32 位版本运行于 32 位 Windows 时,支持 Visual FoxPro 6.0、
Visual FoxPro 7.0、Visual FoxPro 8.0、Visual FoxPro 9.0、Visual FoxPro Advanced
版本,仅可编译生成 Win32 可执行程序。
VFP C++编译软件 32 位版本运行于 64 位 Windows 时,支持 Visual FoxPro 6.0、
Visual FoxPro 7.0、Visual FoxPro 8.0、Visual FoxPro 9.0、Visual FoxPro Advanced、
Visual FoxPro Advanced (x64)版本,可编译生成 Win32/Win64 可执行程序。

2、VFP C++编译软件 64 位版本:


VFP C++编译软件 64 位版本仅可运行于 64 位 Windows。
VFP C++编译软件 64 位版本运行于 64 位 Windows 时,支持 Visual FoxPro 6.0、
Visual FoxPro 7.0、Visual FoxPro 8.0、Visual FoxPro 9.0、Visual FoxPro Advanced、
Visual FoxPro Advanced (x64)版本,可编译生成 Win32/Win64 可执行程序。

十八、参考网站:

1、百誉佳网站:
http://www.baiyujia.com

2、梅子论坛:
http://www.mzvfp.com/read.php?tid=72598
http://www.mzvfp.com/read.php?tid=86545

3、foxite 论坛:
http://www.foxite.com/archives/who-can-hack-this-one-0000260349.htm
http://www.foxite.com/archives/hook-me-how-easy-to-break-this-0000246991.htm
http://www.foxite.com/archives/new-functions-of-vfp-compiler-c-asm-0000280713.htm
http://www.foxite.com/archives/vfp-compiler-demo-0000318456.htm

十九、其它问题:

如有关于 VFP C++编译软件的问题或建议,请向 ccb2000@163.com 发邮件。

You might also like