--------------------------------------------------
                    VFP C++ COMPILER FREQUENTLY ASKED QUESTIONS
                                 January 2017
                 --------------------------------------------------
                 (C)SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD.



1. Download the demo version:

     1, Download VFP C++ Compiler [DEMO VERSION 2017]:
     http://www.baiyujia.com/f_downloadproc_vc.asp

     2, Please use 7-Zip to decompress the file, download 7-Zip:
     http://www.7-zip.org


2. "C/C++ compiler error" Cause Analysis:

     1, For Visual C++ 6.0 (or Visual Studio 98), please install Visual C++ 6.0
Processor Pack.

     Please install Visual C++ 6.0 SP5 first, and then install Visual C++ 6.0
Processor Pack, and then install Visual C++ 6.0 SP6.

     If we have not installed Visual C++ 6.0 Processor Pack, please set Data Alignment
to 1 byte.

     2, When C/C++ compiler file selection FOXRUN8\MAKE.BAT (Visual C++ 8.0):

     Because of Visual C++ 8.0 (and later) in Windows XP (and later) under the
change of the VC runtime files deployment methods: for the previous version we
can copy VC runtime files to the C:\Windows\System32 folder, and now need to
install Microsoft .NET Framework 2.0 or Microsoft Visual C++ 2005 Redistributable
Package, VC runtime files on the C:\Windows\Winsxs folder, Multiple versions can
exist.

     The application compiled with Visual C++ 8.0 need to install Microsoft .NET
Framework 2.0 or Microsoft Visual C++ 2005 Redistributable Package to run. If we
would like to compile into a GREEN-SOFTWARE, need to copy MICROSOFT.VC80.CRT.MANIFEST
and MSVCR80.DLL to the application folder, and the VC runtime Version number must
be right, otherwise, should not start the application.

     For VFP applications developer, using Visual C++ 8.0 compiler or Visual C++
7.0/6.0 compiler there are no major distinction. If we are familiar with .NET
development tools, we can use Visual C++ 8.0 compiler, please fringe Microsoft
.NET Framework 2.0 or Microsoft Visual C++ 2005 Redistributable Package. If we
are not very familiar with .NET development tools, it is recommended to use Visual
C++ 7.0/6.0 compiler.

     There is no direct contact for C/C++ compiler version and VFP version. In
other words, we can use VFP 6.0 to develope applications, and we can use Visual
C++ 8.0 compiler to compile the dynamic link library; we can use VFP 8.0 to
develope applications, and we can use Visual C++ 6.0 compiler to compile the
dynamic link library too.


3. The compile speed:

     Test 1: AMD Sempron 2600+ 1.6G, 512MB memory, Windows 2000, VFP C++ Compiler
compiled and generated the 20MB of EXE file and the 20MB of DLL file required
about 10 minutes.

     Test 2: Intel Core 2 Duo P7350 2.0G, 2GB memory, Windows XP, VFP C++ Compiler
compiled and generated the 20MB of EXE file and the 50MB of DLL file required
for about 30 minutes.

     Test 3: Intel Core 2 Duo P7350 2.0G, 2GB memory, Windows XP, VFP C++ Compiler
compiled and generated the 60MB of EXE file and the 300MB of DLL file required
for about 6 hours.

     Visual C++ 6.0/7.0/8.0/9.0/10.0 compiler compile time ratio of about
9.5:1.0:1.5:1.2:1.2, therefore, recommend to use Visual C++ 7.0 compiler to
compile to get faster speed.

     Demo version have not Optimized, the official version can get faster speed.


4. Runtime library files:

     --------------------------------------------------------------------------------------------
     | 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      |
     |          | VFP6RENU.DLL | VFP6RENU.DLL | VFP6RENU.DLL                   | VFP6RENU.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      |
     |          | VFP7RENU.DLL | VFP7RENU.DLL | VFP7RENU.DLL                   | VFP7RENU.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      |
     |          | VFP8RENU.DLL | VFP8RENU.DLL | VFP8RENU.DLL                   | VFP8RENU.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      |
     |          | VFP9RENU.DLL | VFP9RENU.DLL | VFP9RENU.DLL                   | VFP9RENU.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) |
     --------------------------------------------------------------------------------------------

     If using Visual C++ 8.0 compiler, need to copy MICROSOFT.VC80.CRT.MANIFEST
and MSVCR80.DLL to the application folder.

     If using Visual C++ 9.0 compiler, need to copy MICROSOFT.VC90.CRT.MANIFEST
and MSVCR90.DLL to the application folder.

     Other runtime library files can be copied to:
     1, the application folder,
     2, or the Windows System folder,
     3, or the C:\Program Files\Common Files\Microsoft Shared\VFP folder.

     IMPORTANT NOTE:
     1, The program compiled with Visual C++ 10.0 only run on Windows XP SP2 or later.
     2, The program compiled with Visual C++ 11.0 only run on Windows Vista or later.
     3, The program compiled with Visual C++ 11.0 Update 1 or later only run on Windows
XP SP2 or later.
     4, The program compiled with Visual C++ 12.0 only run on Windows XP SP2 or later.


5. "<PROJECT-NAME>.DLL is not a Visual Foxpro EXE file" problem:

     Please refer to the "C/C++ compiler error" Cause Analysis.

     "<PROJECT-NAME>.DLL is not a Visual Foxpro EXE file" solving methods:

     If using Visual C++ 8.0 compiler, we need to install Microsoft .NET
Framework 2.0 or install Microsoft Visual C++ 2005 Redistributable Package
or copy MICROSOFT.VC80.CRT.MANIFEST and MSVCR80.DLL to the application folder.

     If using Visual C++ 9.0 compiler, we need to install Microsoft .NET
Framework 3.5 or install Microsoft Visual C++ 2008 Redistributable Package
or copy MICROSOFT.VC90.CRT.MANIFEST and MSVCR90.DLL to the application folder.


6. "Visual Foxpro can not start. Could not load resources" Cause Analysis:

     VFP9R.DLL search order:
     1, the application folder,
     2, the registry (HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command),
     3, the Windows System folder.

     VFP9RENU.DLL search order:
     First LoadLibrary VFP9RENU, search order:
     1, the application folder,
     2, the Windows system folder,
     3, PATH environment variable to the specified folder.
     If LoadLibrary VFP9RENU failure, re-search:
     4, the registry (HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command).

     The different of VFP9R.DLL and VFP9RENU.DLL search order are the main cause.

     The most common case is:
     -----------------------------------------------------------------------
     | VFP runtime location  | VFP9R.DLL | VFP9RENU.DLL | matching results |
     -----------------------------------------------------------------------
     | Applications folder   |   1)x     |    1)x       |                  |
     -----------------------------------------------------------------------
     | Registry              |   2)ok    |              |                  |
     -----------------------------------------------------------------------
     | Windows system folder |           |    2)ok      |  error           |
     -----------------------------------------------------------------------

     In other words, in the registry search VFP9R.DLL, but in the Windows system
folder search to VFP9RENU.DLL first, if these two file versions are different,
it will happen "Visual Foxpro can not start. Could not load resources" error!

     "Visual Foxpro can not start. Could not load resources" solving methods:

     By default, the VFP runtime files installed to:
     C:\Program Files\Common Files\Microsoft Shared\VFP

     Recommend copy the VFP runtime files to:
     C:\Windows\System32 folder
     To avoid any possible "Visual Foxpro can not start. Could not load resources"
error.

     VFP C++ Compiler has changed VFP9R.DLL search order to:
     1, the application folder,
     2, the Windows System folder,
     3, the registry (HKEY_CLASSES_ROOT\VisualFoxProRuntime.9\Shell\Open\Command).

     Then VFP9R.DLL and VFP9RENU.DLL search order are same, to avoid "Visual Foxpro
can not start. Could not load resources" error.


7. Compatibility:

     In Windows 98: happen "API call caused an exception" error sometimes.

     In Windows 2000: happen "API call caused an exception" error sometimes.

     Windows XP: no error.

     Windows 8.1 and Windows Defender,
     If VFP C++ Compiler run very slow, please set the Excluded files and locations to:
     1, the VFP C++ Compiler installed folder (C:\Program Files\Baiyujia VFP C++ Compiler),
     2, the application folder,
     3, the temporary files folder (C:\Users\xxx\AppData\Local\Temp).


8. Antivirus software compatibility:

     ----------------------------------------------------------------------------------------------
     | Antivirus software   |    Compiled Executable File    | Compiled Dynamic Link Library File |
     ----------------------------------------------------------------------------------------------
     | Avast Antivirus      |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | Avira Antivirus      |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | ESET NOD32 Antivirus |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | Norton Antivirus     |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | Kingsoft Antivirus   |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | QQPCMgr              |               ok               |                 ok                 |
     ----------------------------------------------------------------------------------------------
     | 360sd                | Does not Compress: ok          | Does not Compress: ok              |
     |                      | Compress: QVM11.1.Malware.Gen? | Compress:QVM31.1.Malware.Gen?      |
     ----------------------------------------------------------------------------------------------


9. Application run speed:

     Usually, the application run speed equivalent to step-by-step run speed.

     If choose optimized compile, the application run speed equal to VFP natural
compile run speed, some statements (for example, x=x+1) faster than VFP Natural
compile run speed.

     For some of the statements should not optimized, the run time and VFP Natural
compile run time ratio of about 7:1 (the worst case).

     If the application run speed decreased significantly (such as startup,
initialization part of the code), and we think the run speed the most important,
the statements even if there will be decompiled impact, then we can insert the
pragmas to solve this problem:
     * Here the code will compile into the dynamic link library
     =[FOXRUN OFF]
     * The following code will not compile into the dynamic link library
     ......
     =[FOXRUN ON]
     * Here the code will compile into the dynamic link library


10. GREEN-SOFTWARE:

     If we would like to compile into a GREEN-SOFTWARE, please select "Include
VFP Support Library".

     That the application required <PROJECT-NAME>.EXE and <PROJECT-NAME>.DLL 
files (and some data files) can be running in any computer (even if that computer
have no VFP runtime files), and can also running in any removable disk.

     If using Visual C++ 8.0 compiler, need to copy MICROSOFT.VC80.CRT.MANIFEST
and MSVCR80.DLL to the application folder.

     If using Visual C++ 9.0 compiler, need to copy MICROSOFT.VC90.CRT.MANIFEST
and MSVCR90.DLL to the application folder.

     We can use MoleBox or Thinstall pack software to pack <PROJECT-NAME>.DLL and
other files (for example, VFP support library files) into <PROJECT-NAME>.EXE.


11. Anti-decompile questions:

     The EXE file can be decompiled (for example, VFP Hooker), but the DLL file
can only be disassembled.

     If we open the debug mode, FOXRUNPRGTEMP1, FOXRUNVCXTEMP1, FOXRUNSCXTEMP1,
FOXRUNFRXTEMP1, FOXRUNLBXTEMP1 folder under the project is the files eventually
included in the EXE file, which is basically does not contain useful VFP source
code. In other words, even decompile the EXE file, and there is no value.

     Usually, VFP C++ Compiler generated the DLL file of up to tens of MB, its C
source code of up to several hundred MB, to disassemble and analysis the DLL
file will be a huge, time-consuming, it may not have any results and significance
of the mission.


12. Debug mode:

     If we open the debug mode, VFP C++ Compiler will generate a log file and
retain the temporary files, easy to analyze the reasons for problem.

     The temporary files include:

     <PROJECT-NAME>.VCL: Compile log file (LOG_FILE);
     <PROJECT-NAME>.VCD: Dictionary file (DICTIONARY_LIST_FILE);
     <PROJECT-NAME>.VCD2: Dictionary file for variable names in string delimiters
(DICTIONARY_LIST_FILE2);
     <PROJECT-NAME>.VCD3: Dictionary file for field or property names
(DICTIONARY_LIST_FILE3);
     <PROJECT-NAME>.VCDX: Dictionary file for variable names can't be compiled
(DICTIONARY_LIST_FILEX);
     <PROJECT-NAME>.VCN: Name Table Index file (NAME_TABLE_INDEX_FILE);
     <PROJECT-NAME>.VCK: Keyword file (KEYWORDS_LIST_FILE);

     <PROJECT-NAME>$VCV$.TMP: Class library and form path file (CLASSLOC_FILE);
     <PROJECT-NAME>$VCM$.TMP: Class library and form code file (ALLMETHODS_FILE);
     <PROJECT-NAME>$VC3$.TMP: Class library and form the custom methods, properties
file (ALLRESERVED3_FILE);
     <PROJECT-NAME>$VCI$.TMP: Class library and form the Procedure Init event include
PARAMETERS statement file (ALLINITPARA_FILE);
     <PROJECT-NAME>$VCE$.TMP: Optimize code file (EXECUTE_FILE);
     <PROJECT-NAME>$VCN$.TMP: Inline function file (INLINE_FILE);
     <PROJECT-NAME>$VCN2$.TMP: Inline function file have been compiled (INLINE_FILE2);
     <PROJECT-NAME>$VCINCDATA$.TMP: Incremental compile data file (INCREMENTALDATA_FILE);
     <PROJECT-NAME>$VCINCMEM$.TMP: Incremental compile memory file (INCREMENTALMEM_FILE);
     <PROJECT-NAME>$VCINCVCF$.TMP: Incremental compile options file (INCREMENTALVCF_FILE);
     <PROJECT-NAME>$VCTASKDATA$.TMP: Multi-Task compile data file (MULTITASKDATA_FILE);
     <PROJECT-NAME>$VCTASKMEM$.TMP: Multi-Task compile memory file (MULTITASKMEM_FILE);
     <PROJECT-NAME>$VCTASKVCF$.TMP: Multi-Task compile options file (MULTITASKVCF_FILE);

     FOXRUNPRGTEMP<n>\*.*: Program files
     FOXRUNVCXTEMP<n>\*.*: Class Library files
     FOXRUNSCXTEMP<n>\*.*: Form files
     FOXRUNFRXTEMP<n>\*.*: Report Files
     FOXRUNLBXTEMP<n>\*.*: Label files


13. Application debug mode:

     If we open the application debug mode, VFP C++ Compiler will generate a log
file when the program running, easy to analyze the reasons for problem.

     The log file when the application running include:

     <PROJECT-NAME>DEBUG_<COMPUTER-NAME>.LOG: application run log file
(APPLICATION_DEBUG_LOG_FILE).


14. Application error log file:

     Usually, VFP C++ Compiler only return the last error of the code block when the
program running and occurs error.
     If we open the application error log file, VFP C++ Compiler will write all errors
to a error log file when the program running and occurs error, easy to analyze the
reasons for problem.

     The error log file when the application running and occurs error include:

     <PROJECT-NAME>ERROR_<COMPUTER-NAME>.LOG: application error log file
(APPLICATION_ERROR_LOG_FILE).


15. Reserved words:

     If the variable name same with the following reserved words, it will not be
compiled to internal name:

     Single letter names;
     The name starts with an underscore;
     To _ACCESS at the end of the name;
     To _ASSIGN at the end of the name;
     VFP reserved words (keywords);
     FOXTOOLS.FLL function names;
     Common Win32API function names;
     DECLARE-DLL statement declare the API function names (DECLARE_FUNCTION_LIST);
     CREATE TABLE | DBF statement the field name (CREATE_FIELD_LIST);
     GetProfileString, GetPrivateProfileString statement the entries name
(PROFILE_KEY_LIST);
     SELECT-SQL statement in the name of the AS field (AS_FIELD_LIST);
     Project folder and its subfolders under the file name (FILENAME);
     Project folder and its subfolders under the table file fieldname (FIELD_NAME);
     Project folder and its subfolders under the the view parameters name
(DBC_VIEW_PARAMETERS);
     Project folder and its subfolders under the the configuration file entries
name (KEY_NAME_IN_INIFILE);
     Project folder and its subfolders under the memory variable file variables
name (VARIABLE_NAME_IN_MEMFILE);
     Project contained FXP/APP/EXE file the variable name (VARIABLE_NAME_IN_APPFILE);
     Project contained FXP/APP/EXE file the procedure name (PROCEDURE_NAME_IN_APPFILE);
     Project contained FXP/APP/EXE file the class name (CLASS_NAME_IN_APPFILE);
     User reserved words file (<PROJECT-NAME>.VCW) specified reserved words.


16. Compile variable name:

     To compile variable name, for example,
     x1
     x2
     will be converted to:
     __VC_A
     __VC_B

     VFP C++ Compiler only compile the variable name in the equal sign (=) assignment
statement (for example, x1=123).

     For the statements that may be a problem after compile variable name in the
file <PROJECT-NAME>.VCD2, for example,
     cancelar Caption = "Cancelar"
     Recommend to select "Does Not Compile Variable Names in String Delimiters",
then all variable names in string delimiters (include cancelar) will not be compiled.

     For the statements that may be a problem after compile variable name in the
file <PROJECT-NAME>.VCD3, for example,
     fld1 ?STR(t1.fld1,10)
     Recommend to select "Does Not Compile Field Names or Property Names", then
all field names or property names (include fld1) will not be compiled.

     We can use the following methods to resolve the problem too:

     1, We can select "Does Not Compile Variable Names Specified in the User
Reserved Words File", and add a user reserved word to the user reserved words
file (<PROJECT-NAME>.VCW), for example,
     cancelar
     then all "cancelar" will not be compiled.

     2, We can change the control's Caption property to "C"+"ancelar", for example,
     Caption = ("C"+"ancelar")
     then the control's Caption property have no "cancelar", but the others "cancelar"
will be compiled continue.

     3, We can select "Only Compile Variable Names Specified in the User Variable
Names File", and add the variable names need to be compiled to the user variable
names file (<PROJECT-NAME>.VCV).


17. VFP C++ Compiler 32-bit version and VFP C++ Compiler 64-bit version:

     1, VFP C++ Compiler 32-bit version:
     VFP C++ Compiler 32-bit version can run on Windows 32-bit or Windows 64-bit.
     When VFP C++ Compiler 32-bit version run on Windows 32-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0 and Visual FoxPro
Advanced version, it only can compile and generate the Win32 executable files.
     When VFP C++ Compiler 32-bit version run on Windows 64-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0, Visual FoxPro
Advanced and Visual FoxPro Advanced (x64) version, it can compile and generate the
Win32/Win64 executable files.

     2, VFP C++ Compiler 64-bit version:
     VFP C++ Compiler 64-bit version only can run on Windows 64-bit.
     When VFP C++ Compiler 64-bit version run on Windows 64-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0, Visual FoxPro
Advanced and Visual FoxPro Advanced (x64) version, it can compile and generate the
Win32/Win64 executable files.


18. Reference websites:

     1, baiyujia.com:
     http://www.baiyujia.com

     2, mzvfp.com:
     http://www.mzvfp.com/read.php?tid=72598
     http://www.mzvfp.com/read.php?tid=86545

     3, foxite.com:
     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


19. Other questions:

     For about VFP C++ Compiler questions or suggestions, please e-mail to ccb2000@163.com.