Professional Documents
Culture Documents
Faq
Faq
一、试用版下载:
二 、“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。
对于 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 编译器生成应用程序。
三、编译速度:
试用版未做优化处理,正式版本可以提高 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)│
└─────┴──────┴──────┴───────────────┴───────┘
其它运行库文件可以拷贝到:
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 及以后平台。
参考前述“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)。
最常见的情况是:
┌──────────┬──────┬──────┬─────┐
│搜索到 VFP 运行库位置 │ VFP9R.DLL │VFP9RCHS.DLL│ 匹配结果 │
├──────────┼──────┼──────┼─────┤
│应用程序文件夹 │ 1)x │ 1)x │ │
├──────────┼──────┼──────┼─────┤
│注册表 │ 2)ok │ │ │
├──────────┼──────┼──────┼─────┤
│Windows 系统文件夹 │ │ 2)ok │ error │
└──────────┴──────┴──────┴─────┘
“资源文件不匹配”问题解决方法:
VFP 安装时默认把运行库文件安装到:
C:\Program Files\Common Files\Microsoft Shared\VFP
建议同时拷贝到:
C:\Windows\System32 文件夹下
以避免可能出现的“资源文件不匹配”问题。
七、兼容性问题:
Windows XP:暂未出现错误。
八、杀毒软件兼容性问题:
如果我们设置:
/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. │
└────────────┴───────────────────────────┘
九、运行速度问题:
如果某段代码编译后运行速度明显下降(如程序启动、初始化部分的代码),而且我们认为运行速度
最重要,这段代码即使被反编译也不会有太大影响,那么我们可以通过设置编译杂注解决这个问题:
* 这里的代码会编译进动态链接库
=[FOXRUN OFF]
* 下面的代码不会编译进动态链接库
……
=[FOXRUN ON]
* 这里的代码会编译进动态链接库
十、绿色软件问题:
十一、防止反编译问题:
如果打开调试模式,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 都不做替换处理。
3、可以选择“仅编译用户变量名称文件中指定的变量名称”,
并在用户变量名称文件(<项目名称>.VCV)中添加需要编译的变量名称。
十八、参考网站:
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
十九、其它问题: