-----------------------------------------------
                  VFP C++编译软件(VFP C++ Compiler)更新历史
                                2024 年 01 月
                -----------------------------------------------
                深圳市百誉佳软件技术有限公司版权所有,2000-2024



**************************************************
2024/4/9

下列问题已修复:

    1、修复COM服务程序和编译选项“/VCMULTITASK=ON|OFF 是否多任务编译模式”的一些问题。


**************************************************
2024/3/24

下列问题已修复:

    1、SET ORDER TO tagexp语句,扩展tagexp后超出长度问题。
    2、修复编译选项“/VCFASTDECOMPDOCASE=ON|OFF 是否快速分解DO CASE语句”的一些问题。


**************************************************
2023/12/18

VFP C++编译软件(VFP C++ Compiler)2023 RELEASE。


**************************************************
2023/12/12

新增功能:

    1、/VCLOWERCASEFILENAME=ON|OFF 使用小写文件名

--------------------------------------
   VFP C++ Compiler Update 20231212
--------------------------------------

1, /VCLOWERCASEFILENAME=ON|OFF Lowercase File Name

The default is ON, VFP C++ Compiler saves lowercase file name in the the executable file.
If set to OFF, VFP C++ Compiler saves uppercase file name in the the executable file.

In the VFP C++ Compiler old version,
there are some problems about uppercase file name in Spanish.

In the VFP C++ Compiler new version,
if we set /VCLOWERCASEFILENAME=ON (the default setting),
there is no problem about file name in Spanish.


**************************************************
2023/12/11

下列问题已修复:

    1、预处理器指令问题。

--------------------------------------
   VFP C++ Compiler Update 20231211
--------------------------------------

1, Preprocessor directives problem.

The VFP C++ Compiler old version can only process the preprocessor directives without space, for example,
#INCLUDE vctest.h
#DEFINE XX2 "Y"
it can't process the preprocessor directives with spaces or tabs, for example,
# INCLUDE vctest.h
#  DEFINE XX2 "Y"

The VFP C++ Compiler new version can process the preprocessor directives without space
and the preprocessor directives with spaces or tabs, for example,
#INCLUDE vctest.h
#DEFINE XX2 "Y"
# INCLUDE vctest.h
#  DEFINE XX2 "Y"

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2023/11/25

下列问题已修复:

    1、Picture属性包含多个连续空格的文件名问题。
    2、类定义中的RelationalExpr属性问题。
    3、#DEFINE预处理器指令编译速度优化。
    4、DIMENSION语句语法错误问题。
    5、FOR EACH ... ENDFOR语句问题。

--------------------------------------
   VFP C++ Compiler Update 20231125
--------------------------------------

1, File names containing multiple contiguous spaces of the Picture property problem.

For example,
Picture = fox     abc.bmp

There are 5 spaces in the file name,
the old VFP C++ Compiler will compress the 5 spaces to 1 space,
it will be converted to:
Picture = fox abc.bmp
then vfp will get wrong Picture property.

The VFP C++ Compiler new version has fixed the bug for the following *Picture / *Icon properties:
DisabledPicture
DownPicture
OLEDragPicture
Picture
DragIcon
Icon
MouseIcon

2, The RelationalExpr property in class definition problem.

For example,
Add Object Relation1 As Relation With ;
ParentAlias = "Table_Parent",;
RelationalExpr = "field1+field2",;
ChildAlias = "Table_Child",;
ChildOrder = "MainOrder"

In the old VFP C++ Compiler,
it will display an error: RelationalExpr Expression Error or Unknown.

The VFP C++ Compiler new version has fixed the bug.

3, #DEFINE preprocessor directive compilation speed optimization.

For example, for the code:
#IF XX1
#DEFINE XX2 "Y"
#ELSE
#DEFINE XX2 "N"
#ENDIF

the const name XX2 has been defined 2 (or more) times,
VFP C++ Compiler will take more time to process the const name XX2,
so VFP C++ Compiler will run slow.

I did some changes in the VFP C++ Compiler new version.

If a const name is defined many times, and they are defined the same value, for example,
#DEFINE XX2 "Y"
#DEFINE XX2 "Y"
VFP C++ Compiler will process these #DEFINE preprocessor directives very fast.

If a const name is defined many times, and they are not defined the same value, for example,
#IF XX1
#DEFINE XX2 "Y"
#ELSE
#DEFINE XX2 "N"
#ENDIF
VFP C++ Compiler will process these #DEFINE preprocessor directives slow.

4, DIMENSION statement syntax error problem.

In VFP9, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be compiled to:
DIMENSION aFiles(1)
so there is no error for the compiled fxp/app/exe files.

In the VFP C++ Compiler old version, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be converted to:
DIMENSION ("aFiles(1)") = "Default_Item"
so there is an error for the compiled fxp/app/exe files.

In the VFP C++ Compiler new version, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be converted to:
DIMENSION ("aFiles(1)")
so there is no error for the compiled fxp/app/exe files,
and VFP C++ Compiler will display the compilation error messages:
DIMENSION Syntax Error: DIMENSION aFiles(1) = "Default_Item"
and write the error message to the error log (.err) file.

The VFP C++ Compiler new version has fixed the bug for the following statements:
PUBLIC | PRIVATE | LOCAL | DIMENSION | DECLARE [ARRAY] Syntax Error.

5, FOR EACH ... ENDFOR statement problem.

For example,
FOR n1=1 TO 130
   ?n1
   LOCAL lcComputerName, loWMIService, loItems, loItem
   lcComputerName = "."
   loWMIService = GETOBJECT("winmgmts:\\" + lcComputerName + "\root\cimv2")
   loItems = loWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
   FOR EACH loItem IN loItems
      ?loItem.name
   ENDFOR
ENDFOR

_FreeObject() API Library Routine (form the vfp help file DV_FOXHELP9.CHM):
If an object reference is returned from any Visual FoxPro API function,
for example, _Evaluate() or _GetObjectProperty(),
you must use _FreeObject() to release the object when you are no longer using it.

In the old VFP C++ Compiler,
it will create a backup object of the group object,
and then it will call the _Evaluate() function to evaluate the backup object,
but it will not call the _FreeObject() function to free the backup object,
and the maximum number of objects in an API Library is 128,
so it will cause an error:
There is not enough memory to complete this operation (Error 43).

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2023/3/6

新增功能:

    1、/VCRUNTIMELIBRARYFILETYPE=n VC运行库文件类型(仅支持Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20230306
--------------------------------------

1, /VCRUNTIMELIBRARYFILETYPE=n File Type of the VC Runtime Library (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the file type of the VC runtime library
of the compiled executable files:
     -2 - The VC runtime library file is MSVCR70.DLL
     -1 - The VC runtime library file is MSVCR71.DLL
     0 - The VC runtime library file is MSVCR100.DLL
     1 - The VC runtime library file is MSVCR10064.DLL
     2 - The VC runtime library file is MSVCRA64.DLL

If we set /VCRUNTIMELIBRARYFILETYPE=2,
we can save the 32-bit executable files and the 64-bit executable files in the same folder, for example,
     MYAPP.EXE      && the 32-bit executable file
     MYAPP.DLL      && the 32-bit dynamic link library file
     MSVCR100.DLL   && the 32-bit Visual C++ Runtime Library
     VFPAR.DLL      && the 32-bit VFP Advanced Runtime Library
     MYAPP64.EXE    && the 64-bit executable file
     MYAPP64.DLL    && the 64-bit dynamic link library file
     MSVCRA64.DLL   && the 64-bit Visual C++ Runtime Library
     VFPAR64.DLL    && the 64-bit VFP Advanced Runtime Library


**************************************************
2023/2/26

下列问题已修复:

    1、DEFINE CLASS ... OF ...语句问题。

--------------------------------------
   VFP C++ Compiler Update 20230226
--------------------------------------

1, DEFINE CLASS ... OF ... statement problem.

For example,
DEFINE CLASS custom_vctest2 AS custom_vctest OF mylib.vcx
ENDDEFINE

For the old VFP C++ Compiler,
it will create 2 names custom_vctest2 and custom_vctest:mylib.vcx in the name table index,
and then it will display an error message "Create the global name table index failed".

For the new VFP C++ Compiler,
it will create 2 names custom_vctest2 and custom_vctest in the name table index,
and then it will run fine.


**************************************************
2023/2/12

新增功能:

    1、支持Visual C++ 14.3(Visual Studio 2022)编译器所有版本。

--------------------------------------
   VFP C++ Compiler Update 20230212
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.3 (Visual Studio 2022).
For the history of Visual C++ 14.3 (Visual Studio 2022), please refer to:
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.3
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.2
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.1
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.0


**************************************************
2023/2/1

新增功能:

    1、/VCADDPROC=ON|OFF 是否载入附加过程文件
       /VCADDPROCLIST=... 附加过程文件列表

--------------------------------------
   VFP C++ Compiler Update 20230201
--------------------------------------

For example,
SET PROCEDURE TO ("myaddproc.fxp") ADDITIVE
USE VCTEST.DBF EXCLUSIVE
INDEX ON myfunc(vexp) TAG vexp
So, we must load the procedure file myaddproc.fxp first,
and then we can open the table file vctest.dbf.

In the old VFP C++ Compiler,
it will not load the procedure file myaddproc.fxp,
so it will cause an error: Open Table File Error.

In the new VFP C++ Compiler,
we can set:
/VCADDPROC=ON
/VCADDPROCLIST=myaddproc.fxp
so it will load the procedure file myaddproc.fxp first,
so it can run fine.


**************************************************
2023/1/30

下列问题已修复:

    1、修复自动清除程序缓冲区命令的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20230130
--------------------------------------

Usually, the following commands will clear the compiled program buffer automatically:
Activate another application, when Visual FoxPro is running in interactive mode (in the command window)
CLEAR PROGRAM command
DOEVENTS command
MODIFY COMMAND command and MODIFY FILE command, specify the name of the text editor (TEDIT = [/N] editor)
in the configuration file
RUN or ! command, when Visual FoxPro is not running in a VFP API Library routine
SET DEVELOPMENT ON command
CHDIR (or CD) command and SET DEFAULT command, when Visual FoxPro Advanced is not running
in a VFP API Library routine

In the old VFP C++ Compiler, sometimes there are some problems for the following commands:
MODIFY COMMAND command and MODIFY FILE command, specify the name of the text editor (TEDIT = [/N] editor)
in the configuration file

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/12/10

VFP C++编译软件(VFP C++ Compiler)2022 RELEASE。


**************************************************
2022/10/30

新增功能:

    1、/VCNOTDISPLAY_COMPILEERROR=ON|OFF 是否不显示编译错误信息

--------------------------------------
   VFP C++ Compiler Update 20221030
--------------------------------------

1, /VCNOTDISPLAY_COMPILEERROR=ON|OFF Does Not Display Compilation Error Messages

The default is OFF, VFP C++ Compiler displays compilation error messages.
If set to ON, VFP C++ Compiler does not display compilation error messages.

In the old VFP C++ Compiler,
if there are some compilation errors,
VFP C++ Compiler saves compilation error messages to the error log (.err) file.

In the new VFP C++ Compiler,
if there are some compilation errors,
VFP C++ Compiler saves compilation error messages to the error log (.err) file,
and displays compilation error messages.


**************************************************
2022/9/25

下列问题已修复:

    1、修复COM服务程序和编译选项“/VCNAMEMULTIPROJ=ON|OFF 是否编译可以用于多个项目的变量名称”的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20220925
--------------------------------------

In the old VFP C++ Compiler,
for COM server programs,
we can not select the compile options /VCNAMEMULTIPROJ=ON|OFF Compile Variable Names for Multiple Projects.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/9/12

新增功能:

    1、/VCNEWNAMEMODE=n 创建名称表索引模式(仅支持Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20220912
--------------------------------------

1, /VCNEWNAMEMODE=n Create the Name Table Index Mode (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the Create the Name Table Index Mode:
     0 - Old Mode to Create the Name Table Index
     1 - New Mode to Create the Name Table Index
     2 - Auto Mode to Create the Name Table Index


**************************************************
2022/9/10

下列问题已修复:

    1、修复ACCESS或ASSIGN方法的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20220910
--------------------------------------

In the old VFP C++ Compiler,
sometimes there are some problems for Access or Assign methods.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/8/24

新增功能:

    1、/VCSTEP_ONERROR=ON|OFF 是否单步编译错误处理代码
    2、/VCSTEP_ONESCAPE=ON|OFF 是否单步编译ESC键处理代码


**************************************************
2022/6/16

下列问题已修复:

    1、修复编译选项“/VCENCRYPTPCODE=ON|OFF 是否加密伪代码(P-CODE)”
和“/VCFASTENCRYPTPCODE=ON|OFF 是否快速加密伪代码(P-CODE)”的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20220616
--------------------------------------

For example,

PUBLIC m.p_count
m.p_count=1

IF TYPE("_SCREEN.custom_vctest1")="O"
   _SCREEN.REMOVEOBJECT("custom_vctest1")
ENDI
_SCREEN.ADDOBJECT("custom_vctest1","custom_vctest")

_SCREEN.custom_vctest1.method1()

RETU

DEFINE CLASS custom_vctest AS CUSTOM

property1=0

FUNCTION method1

IF m.p_count<=5
   m.p_count=m.p_count+1
   THIS.method1()
ENDIF

THIS.property1=SECOND()

RETU

FUNCTION property1_assign

LPARAMETERS tnvalue

THIS.property1=tnvalue
THIS.method1()

RETU

ENDDEFINE

When vfp runnig the statement "THIS.property1=SECOND()",
it will run the property1_assign() method,
and then it will run into the method1() method again,
and then it will run the statement "THIS.property1=SECOND()" again...
This is a recursive routine.

In the old VFP C++ Compiler,
for some recursion code in property_access or property_assign methods,
there are some bugs for the compile options /VCENCRYPTPCODE=ON|OFF Encrypt P-Code
and /VCFASTENCRYPTPCODE=ON|OFF Fast Encrypt P-Code.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/5/18

新增功能:

    1、/VCANTIDECOMPILE=ON|OFF 是否防止反编译


**************************************************
2022/4/7

新增功能:

    1、自动使用“单步编译模式”编译ON ESCAPE command和ON ESCAPE之间的语句。

--------------------------------------
   VFP C++ Compiler Update 20220407
--------------------------------------

1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ESCAPE command and ON ESCAPE.

For example,

cancelado = .f.
SET ESCAPE ON
ON ESCAPE cancelado = .t.
numeroDato=1
totalDato=100000
WAIT CLEAR
DO WHILE numeroDato<=100000
   IF cancelado
      IF messagebox("Do you want to cancel the process?","Cancel.",4+32+256) = 6
         EXIT
      ELSE
         cancelado = .f.
      ENDIF
   ENDIF
   WAIT WINDOW NOWAIT ALLTRIM(STR(numeroDato/1000))+"%. Press ESC to cancel the process."
   numeroDato=numeroDato+1
ENDDO
SET ESCAPE off
ON ESCAPE

For the older version,
it will compile the vfp code:

numeroDato=1
totalDato=100000
WAIT CLEAR
DO WHILE numeroDato<=100000
   IF cancelado
      IF messagebox("Do you want to cancel the process?","Cancel.",4+32+256) = 6
         EXIT
      ELSE
         cancelado = .f.
      ENDIF
   ENDIF
   WAIT WINDOW NOWAIT ALLTRIM(STR(numeroDato/1000))+"%. Press ESC to cancel the process."
   numeroDato=numeroDato+1
ENDDO

to one C funciton __VC_TEST_xxx().

It will run all code in the C funciton __VC_TEST_xxx(),
and then check the ESC key,
and then call the ON ESCAPE handling (run the code: cancelado = .t.).

The new VFP C++ Compiler will automatic compile the vfp code between:

ON ESCAPE xxx
...
...
...
ON ESCAPE (or ON ESCAPE *, or ON ESCAPE &xxx)

as "Single Step Compile Mode":

ON ESCAPE cancelado = .t.
__VC_TEST_A(1)
__VC_TEST_A(2)
__VC_TEST_A(3)
DO WHILE __VC_TEST_A(4)
IF __VC_TEST_A(5)
IF __VC_TEST_A(6)
EXIT
ELSE
__VC_TEST_A(7)
ENDIF
ENDIF
__VC_TEST_A(8)
__VC_TEST_A(9)
ENDDO
__VC_TEST_A(10)
ON ESCAPE

then it can run fine.


**************************************************
2021/12/24

VFP C++编译软件(VFP C++ Compiler)2021 RELEASE。


**************************************************
2021/12/16

下列问题已修复:

    1、修复SYS(17)函数的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20211216
--------------------------------------

For the following code:
#IF SYS(17) = "X64"
?"VFP Advanced 64-bit version"
#ELSE
?"VFP Advanced 32-bit version"
#ENDIF

When the old VFP C++ Compiler 32-bit compiled and generated the Win32 executable file,
and then run the Win32 executable file, it will display "VFP Advanced 32-bit version",
it is correct.

When the old VFP C++ Compiler 64-bit compiled and generated the Win64 executable file,
and then run the Win64 executable file, it will display "VFP Advanced 64-bit version".
it is correct.

When the old VFP C++ Compiler 32-bit compiled and generated the Win64 executable file,
and then run the Win64 executable file, it will display "VFP Advanced 32-bit version",
it is incorrect.

When the old VFP C++ Compiler 64-bit compiled and generated the Win32 executable file,
and then run the Win32 executable file, it will display "VFP Advanced 64-bit version".
it is incorrect.

The VFP C++ Compiler new version has fixed the bug.

For the following code:
IF SYS(17) = "X64"
?"VFP Advanced 64-bit version"
ELSE
?"VFP Advanced 32-bit version"
ENDIF

The compiled executable file will call the SYS(17) function at runtime instead of compile time,
so there is no the bug in the VFP C++ Compiler old version.

The the _WIN64 system variable can only be used at runtime, it can not be used at compile time,
so there is no the bug for the the _WIN64 system variable.


**************************************************
2021/3/1

下列问题已修复:

    1、DEFINE BAR ... SKIP FOR condition语句,扩展condition后超出长度问题。


**************************************************
2021/1/26

新增功能:

    1、支持Visual C++ 14.2(Visual Studio 2019)编译器所有版本。

--------------------------------------
   VFP C++ Compiler Update 20210126
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.2 (Visual Studio 2019).
For the history of Visual C++ 14.2 (Visual Studio 2019), please refer to:
https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes-history
    Visual Studio 2019 version 16.7 Release Notes
    Visual Studio 2019 version 16.6 Release Notes
    Visual Studio 2019 version 16.5 Release Notes
    Visual Studio 2019 version 16.4 Release Notes
    Visual Studio 2019 version 16.3 Release Notes
    Visual Studio 2019 version 16.2 Release Notes
    Visual Studio 2019 version 16.1 Release Notes
    Visual Studio 2019 version 16.0 Release Notes


**************************************************
2020/12/24

VFP C++编译软件(VFP C++ Compiler)2020 RELEASE。


**************************************************
2020/10/14

新增功能:

    1、/VFPLIBVERSION=... VFP运行库版本(仅支持Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20201014
--------------------------------------

1, /VFPLIBVERSION=... VFP Support Library Version (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select VFP Support Library Version:
     AUTO - The VFP Support Library Version is the same as the VFP Run File Version
     10.0 - The VFP Support Library Version is 10.0 Version
     10.1 - The VFP Support Library Version is 10.1 Version


**************************************************
2020/10/6

新增功能:

    1、/VCDPIAWARENESSMODE=n DPI感知模式(仅支持Visual FoxPro Advanced)
    2、/VCREQUESTEXECUTIONLEVEL=n 请求运行级别(仅支持Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20201006
--------------------------------------

1, /VCDPIAWARENESSMODE=n DPI Awareness Mode (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the DPI awareness mode of the compiled
executable files:
     -1 - No DPI Awareness Mode
     0 - DPI Unaware Mode
     1 - DPI System Aware Mode
     2 - DPI Per Monitor Aware Mode
     3 - DPI Per Monitor V2 Aware Mode

2, /VCREQUESTEXECUTIONLEVEL=n Request Execution Level (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the Request Execution Level of the compiled
executable files:
     -1 - No Requesting Execution Level
     0 - No Additional Permissions
     1 - The Highest Permissions Available
     2 - Full Administrator Permissions


**************************************************
2020/9/6

新增功能:

    1、/VCMULTITASK_COMPILEFORM=ON|OFF 是否多任务编译大表单文件
       /VCMULTITASKNUMBER_COMPILEFORM=n 多任务编译任务大表单个数
       /VCMULTITASK_COMPILEDLL=ON|OFF 是否多任务编译动态链接库源文件
       /VCMULTITASKNUMBER_COMPILEDLL=n 多任务编译任务动态链接库个数

--------------------------------------
   VFP C++ Compiler Update 20200906
--------------------------------------

1, /VCMULTITASK_COMPILEFORM=ON|OFF Multi-Task Compile the Large Form File
   /VCMULTITASKNUMBER_COMPILEFORM=n Multi-Task Number for Compiling the Large Form File

VFP C++ Compiler generates a large form file which contains all code in the VFP project file,
sometimes the size of the large form file is great than 100 MB,
and it takes more than 10 minutes to compile the large form file.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCMULTITASK_COMPILEFORM=ON Multi-Task Compile the Large Form File
/VCMULTITASKNUMBER_COMPILEFORM=4 Multi-Task Number for Compiling the Large Form File
then VFP C++ Compiler can compile faster.

If we set:
/VCMULTITASK=ON Multi-Task Compile Mode
VFP C++ Compiler will run multi-task to compile the large form file automatically.

2, /VCMULTITASK_COMPILEDLL=ON|OFF Multi-Task Compile the DLL Source Files
   /VCMULTITASKNUMBER_COMPILEDLL=n Multi-Task Number for Compiling the DLL Source Files

VFP C++ Compiler generates many C/C++ files (foxrun*.c),
sometimes the size of the C/C++ files are great than 100 MB,
and it takes more than 10 minutes to compile the C/C++ files.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCMULTITASK_COMPILEDLL=ON Multi-Task Compile the DLL Source Files
/VCMULTITASKNUMBER_COMPILEDLL=4 Multi-Task Number for Compiling the DLL Source Files
then VFP C++ Compiler can compile faster.

If we set:
/VCMULTITASK=ON Multi-Task Compile Mode
VFP C++ Compiler will run multi-task to compile the DLL source files automatically.


**************************************************
2020/8/16

下列问题已修复:

    1、修复COM服务程序的一些问题。
    2、修复编译选项“/APPDEBUG=ON|OFF 是否应用程序调试模式”的一些问题。

--------------------------------------
   VFP C++ Compiler Update 20200816
--------------------------------------

1, Fixed some bugs for COM server programs.

If the COM server program is small, there is no problem in the VFP C++ Compiler old version.
If the COM server program is bigger, there are some bugs in the VFP C++ Compiler old version.

The VFP C++ Compiler new version has fixed the bug.

2, Fixed some bugs for the compile option /APPDEBUG=ON|OFF Application Debug Mode.

The VFP C++ Compiler old version only creates an 'after' application debug log:
<VFP statement>
after_log

Usually, for almost VFP statements,
the VFP C++ Compiler new version creates 2 application debug logs:
before_log
<VFP statement>
after_log

VFP C++ Compiler does NOT create an application debug log for the following statements:
TEXT ... ENDTEXT
properties in DEFINE CLASS ... ENDDEFINE (between endfunc/endproc and Function/proc)
PROCEDURE 
FUNCTION 
PROTECTED 
HIDDEN 
PARAMETERS 
LPARAMETERS 
ENDDEFINE
Preprocessor Directives (starts with #)

VFP C++ Compiler only creates an 'after' application debug log for the following statements:
ELSE
CASE
OTHERWISE
CATCH
FINALLY

<VFP statement>
after_log

VFP C++ Compiler only creates a 'before' application debug log for the following statements:
DO CASE
LOOP
EXIT
THROW
RETURN
ENDxxx (except ENDDEFINE)

before_log
<VFP statement>


**************************************************
2020/8/1

新增功能:

    1、/VCNOTCOMPILEFILELIST=... 不编译文件列表

--------------------------------------
   VFP C++ Compiler Update 20200801
--------------------------------------

1, /VCNOTCOMPILEFILELIST=... Does Not Compile Files List

Now we can set the does not compile files list, for example,
/VCNOTCOMPILEFILELIST=FORMS\*.SCX,LIBS\*.VCX


**************************************************
2020/6/20

新增功能:

    1、支持VFP C++编译软件的多个实例。

--------------------------------------
   VFP C++ Compiler Update 20200620
--------------------------------------

In the old VFP C++ Compiler,
we can only run single-instance of VFP C++ Compiler.

If we want to compile many projects, we can create a batch file compileall.bat, for example,
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG1\PROG1.VCF" /SILENT=ON
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG2\PROG2.VCF" /SILENT=ON
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG3\PROG3.VCF" /SILENT=ON
when we running the batch file compileall.bat,
it will compile the 1st project, and the 2nd project, and the 3rd project.

In the new VFP C++ Compiler,
we can run multiple-instances of VFP C++ Compiler.

If we want to compile many projects, we can create a batch file compileall.bat, for example,
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG1\PROG1.VCF" /SILENT=ON
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG2\PROG2.VCF" /SILENT=ON
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG3\PROG3.VCF" /SILENT=ON
when we running the batch file compileall.bat,
it will run 3 instances of VFP C++ Compiler,
they will compile the 3 projects at the same time.


**************************************************
2020/3/30

新增功能:

    1、/VCADDFLL=ON|OFF 是否载入附加库文件
       /VCADDFLLLIST=... 附加库文件列表

--------------------------------------
   VFP C++ Compiler Update 20200330
--------------------------------------

For example,
SET LIBRARY TO ("FOXTOOLS.FLL") ADDITIVE
USE VCTEST.DBF EXCLUSIVE
INDEX ON WORDS(vexp) TAG WORDS
So, we must load the VFP API library file foxtools.fll first,
and then we can open the table file vctest.dbf.

In the old VFP C++ Compiler,
it will not load the VFP API library file foxtools.fll,
so it will cause an error: Open Table File Error.

In the new VFP C++ Compiler,
we can set:
/VCADDFLL=ON
/VCADDFLLLIST=FOXTOOLS.FLL
so it will load the VFP API library file foxtools.fll first,
so it can run fine.


**************************************************
2019/12/30

VFP C++编译软件(VFP C++ Compiler)2019 RELEASE。


**************************************************
2019/11/6

新增功能:

    1、/VCOUTPUTEXE=... 编译输出可执行文件
    2、/VCOUTPUTDLL=... 编译输出动态链接库文件


**************************************************
2019/9/29

下列问题已修复:

    1、支持VFP加密应用程序(仅支持Visual FoxPro Advanced)。


**************************************************
2019/9/26

下列问题已修复:

    1、FOR EACH ... IN collection语句,但collection中没有任何元素的问题。


**************************************************
2019/7/2

新增功能:

    1、支持COM服务程序的“包含VFP运行库”编译选项。


**************************************************
2019/5/28

新增功能:

    1、/SILENTDISPLAY=ON|OFF 是否静默显示模式


**************************************************
2019/5/25

新增功能:

    1、支持动态链接库文件版本信息。

--------------------------------------
   VFP C++ Compiler Update 20190525
--------------------------------------

Usually, we can create the version information file FOXRUN\RSRCDLL\RSRCDLL.RC in the project folder,
then when VFP C++ Compiler build the dynamic link library file,
the version information file will be embedded into the dynamic link library file automatically.

For example, we can create the version information file such as:
/////////////////////////////////////////////////////////////////////////////
//
// Version
//

1 VERSIONINFO
 FILEVERSION 10,0,0,0
 PRODUCTVERSION 10,0,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x2bL
#else
 FILEFLAGS 0x2aL
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "\0"
            VALUE "CompanyName", "SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD.\0"
            VALUE "FileDescription", "VFP C++ Compiler for Windows\0"
            VALUE "FileVersion", "10.0.0.0\0"
            VALUE "InternalName", "VC\0"
            VALUE "LegalCopyright", "(C)SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD., 2000-2019.\0"
            VALUE "LegalTrademarks", "\0"
            VALUE "OleSelfRegister", "\0"
            VALUE "OriginalFilename", "VC\0"
            VALUE "PrivateBuild", "\0"
            VALUE "ProductName", "VFP C++ Compiler\0"
            VALUE "ProductVersion", "10.0.0.0\0"
            VALUE "SpecialBuild", "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

If there is the version information in the project file,
VFP C++ Compiler will update the following version number in the version information file automatically:
FILEVERSION 10,0,0,0
PRODUCTVERSION 10,0,0,0
VALUE "FileVersion", "10.0.0.0\0"
VALUE "ProductVersion", "10.0.0.0\0"
then the version number in the executable file is the same version number in the dynamic link library file.


**************************************************
2019/2/18

下列问题已修复:

    1、支持Visual C++ 14.1(Visual Studio 2017)编译器所有版本。

--------------------------------------
   VFP C++ Compiler Update 20190218
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.1 (Visual Studio 2017).
For the history of Visual C++ 14.1 (Visual Studio 2017), please refer to:
https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-history
    Visual Studio 2017 version 15.9 Release Notes
    Visual Studio 2017 version 15.8 Release Notes
    Visual Studio 2017 version 15.7 Release Notes
    Visual Studio 2017 version 15.6 Release Notes
    Visual Studio 2017 version 15.5 Release Notes
    Visual Studio 2017 version 15.4 Release Notes
    Visual Studio 2017 version 15.3 Release Notes
    Visual Studio 2017 version 15.2 Release Notes
    Visual Studio 2017 version 15.1 Release Notes
    Visual Studio 2017 version 15.0 Release Notes


**************************************************
2018/12/23

VFP C++编译软件(VFP C++ Compiler)2018 RELEASE。


**************************************************
2018/12/22

下列问题已修复:

    1、自动增加版本号问题。


**************************************************
2018/3/26

下列问题已修复:

    1、杀毒软件兼容性问题。


**************************************************
2017/12/28

VFP C++编译软件(VFP C++ Compiler)2017 RELEASE。


**************************************************
2017/3/20

新增功能:

    1、支持Visual C++ 14.1(Visual Studio 2017)编译器。


**************************************************
2017/2/8

下列问题已修复:

    1、项目中包含数据库文件问题。

--------------------------------------
   VFP C++ Compiler Update 20170208
--------------------------------------

1, Project includes database files problem.

For example,
the project includes some database files:
testdata1.dbc
testdata2.dbc
testdata3.dbc
...
these database files (*.dbc, *.dct and *.dcx) will be compiled into the executable file.

For the old VFP C++ Compiler,
these database files (*.dbc, *.dct and *.dcx) will be opened in the system data session automatically
when opening the table (*.dbf) files,
so these database files (*.dbc, *.dct and *.dcx) will NOT be compiled into the executable file,
so the compiled executable file is a corrupted executable file and it can't run.

For the new VFP C++ Compiler,
it will run the command "CLOSE DATABASE ALL" first,
so these database files (*.dbc, *.dct and *.dcx) will be compiled into the executable file,
so it can run fine.


**************************************************
2016/12/29

VFP C++编译软件(VFP C++ Compiler)2016 RELEASE。


**************************************************
2016/8/1

新增功能:

    1、支持Visual C++ 14.0(Visual Studio 2015)编译器。


**************************************************
2016/4/10

下列问题已修复:

    1、FOR EACH ... ENDFOR语句问题。

--------------------------------------
   VFP C++ Compiler Update 20160410
--------------------------------------

1, FOR EACH ... ENDFOR statement problem.

For example,
LOCAL lcComputerName, loWMIService, loItems, loItem
lcComputerName = "."
loWMIService = GETOBJECT("winmgmts:\\" + lcComputerName + "\root\cimv2")
loItems = loWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
FOR EACH loItem IN loItems
   ?loItem.name
ENDFOR
WAIT

For the old VFP C++ Compiler,
it will run the FOR EACH ... ENDFOR statement many times, for example,
FOR EACH loItem IN loItems
   ...
ENDFOR
FOR EACH loItem IN loItems
   ...
ENDFOR
FOR EACH loItem IN loItems
   ...
ENDFOR
but VFP can only run the FOR EACH ... ENDFOR statement once.
When VFP run the FOR EACH ... ENDFOR statement for the first time,
it can run fine.
When VFP run the FOR EACH ... ENDFOR statement for the second time,
it will cause an error:
OLE IDispatch exception code 0 from SWbemObjectSet: Unspecified error.

For the new VFP C++ Compiler,
it will only run the FOR EACH ... ENDFOR statement once,
so it can run fine.


**************************************************
2015/12/23

VFP C++编译软件(VFP C++ Compiler)2015 RELEASE。


**************************************************
2015/8/20

新增功能:

    1、支持清单文件。

--------------------------------------
   VFP C++ Compiler Update 20150820
--------------------------------------

Usually, we can create a user-defined manifest file <PROJECT-NAME>.EXE.manifest,
then when VFP build the executable file,
the user-defined manifest file will be embedded into the executable file automatically.

For example, for the Win32 executable files compiled with Visual FoxPro 32-bit,
we can create a user-definded manifest file such as:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity 
	version="1.0.0.0" 
	type="win32" 
	name="Microsoft.VisualFoxPro" 
	processorArchitecture="x86"
/>
<description>Visual FoxPro</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
	<security>
		<requestedPrivileges>
			<requestedExecutionLevel level="requireAdministrator" /> 
		</requestedPrivileges>
	</security>
</trustInfo>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            language="*"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
        />
    </dependentAssembly>
</dependency>
</assembly>
then the compiled executable file will run as Administrator.

IMPORTANT NOTE:

For the Win64 executable files compiled with VFP Advanced (x64),
we must change:
processorArchitecture="x86"
to:
processorArchitecture="amd64"


**************************************************
2015/7/5

新增功能:

    1、/VFPLIBLANGUAGE=... VFP运行库语言(仅支持Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20150705
--------------------------------------

1, /VFPLIBLANGUAGE=... VFP Support Library Language (only support Visual FoxPro Advanced)

For Visual FoxPro Advanced, we can select VFP Support Library Language:
CHS - Simplified Chinese
CHT - Traditional Chinese
CSY - Czech
DEU - German
ENU - English
ESN - Spanish
FRA - French
KOR - Korean
RUS - Russian


**************************************************
2015/2/26

VFP C++编译软件 (x64)。

--------------------------------------
   VFP C++ Compiler Update 20150226
--------------------------------------

1, VFP C++ Compiler (x64).

For the 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 is running 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 can only compile and generate the Win32 executable files.
When VFP C++ Compiler 32-bit version is running 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.

For the VFP C++ Compiler 64-bit version:
VFP C++ Compiler 64-bit version can only run on Windows 64-bit.
When VFP C++ Compiler 64-bit version is running 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.

If we select "VFP run file" to a 32-bit VFP run file,
for example,
C:\Program Files (x86)\Microsoft Visual FoxPro 9\VFP9.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfp9\VFP9.EXE)
C:\Program Files (x86)\Microsoft Visual FoxPro Advanced\VFPA.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfpa\VFPA.EXE)
and select "C/C++ compiler file" to a 32-bit make file,
for example,
C:\Program Files (x86)\Baiyujia VFP C++ Compiler\foxrun10\MAKE.BAT
VFP C++ Compiler will compile and generate to the Win32 executable files.

If we select "VFP run file" to a 64-bit VFP run file,
for example,
C:\Program Files\Microsoft Visual FoxPro Advanced\VFPA.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfpa64\VFPA.EXE)
and select "C/C++ compiler file" to a 64-bit make file,
for example,
C:\Program Files (x86)\Baiyujia VFP C++ Compiler\foxrun1064\MAKE.BAT
VFP C++ Compiler will compile and generate to the Win64 executable files.


**************************************************
2015/2/12

下列问题已修复:

    1、SCAN WHILE ... ENDSCAN语句问题。

--------------------------------------
   VFP C++ Compiler Update 20150212
--------------------------------------

1, SCAN WHILE ... ENDSCAN statement problem.

For example,
?"SCAN WHILE: 2,3"
?
GO 2
?"SCAN START - RECN(): "+LTRIM(STR(RECN(),16))
SCAN WHILE MOD(RECN(),5)<=3
   ?RECN()
ENDS
?"SCAN END - RECN(): "+LTRIM(STR(RECN(),16))
WAIT

For the old VFP C++ Compiler,
it will display:
SCAN END - RECN(): 3

For the new VFP C++ Compiler,
it will display:
SCAN END - RECN(): 4

Now VFP C++ Compiler can run SCAN WHILE ... ENDSCAN code same as VFP.


**************************************************
2014/12/20

VFP C++编译软件(VFP C++ Compiler)2014 RELEASE。


**************************************************
2014/12/13

新增功能:

    1、支持Visual C++ 12.0(Visual Studio 2013)编译器。


**************************************************
2014/11/28

新增功能:

    1、/VCFASTSCXINIT=ON|OFF 是否表单对象属性快速转换为INIT事件代码
    2、/VCFASTFRXINIT=ON|OFF 是否报表数据快速转换为数据环境INIT事件代码

--------------------------------------
   VFP C++ Compiler Update 20141128
--------------------------------------

1, /VCFASTSCXINIT=ON|OFF Fast Convert Form's Properties into Procedure Init
   /VCFASTFRXINIT=ON|OFF Fast Convert Report's Expressions into Procedure Init

If we set:
/VCFASTSCXINIT=ON Fast Convert Form's Properties into Procedure Init
VFP C++ Compiler only convert the VFP base class object's properties into procedure init,
so convert faster.

If we set:
/VCFASTFRXINIT=ON Fast Convert Report's Expressions into Procedure Init
VFP C++ Compiler only convert the TextBox control's expressions into procedure init,
it does not convert the Label control's expressions into procedure init,
so convert faster.

Recommend to set the following compile options in the more compile options form:
/VCSCXINIT=ON Convert Form's Properties into Procedure Init
/VCFASTSCXINIT=ON Fast Convert Form's Properties into Procedure Init
/VCFRXINIT=ON Convert Report's Expressions into Procedure Init
/VCFASTFRXINIT=ON Fast Convert Report's Expressions into Procedure Init
then VFP C++ Compiler can compile faster.


**************************************************
2014/11/20

新增功能:

    1、/VCMULTITASK=ON|OFF 是否多任务编译模式
    2、/VCMULTITASKNUMBER=n 多任务编译任务个数

--------------------------------------
   VFP C++ Compiler Update 20141120
--------------------------------------

1, /VCMULTITASK=ON|OFF Multi-Task Compile Mode
   /VCMULTITASKNUMBER=n Multi-Task Number for Compiling Files

Usually we can set the multi-task number to the maximum number of threads for the CPU supported,
for example, for a 2 cores 4 threads CPU, we can set it to 4:
/VCMULTITASK=ON Multi-Task Compile Mode
/VCMULTITASKNUMBER=4 Multi-Task Number for Compiling Files

Usually, if we set the multi-task number to 4 for a 4 threads CPU,
the compiled time is about 60% of the compiled time of the single-task compile.
If we set the multi-task number to 8 for a 8 threads CPU,
the compiled time is about 40% of the compiled time of the single-task compile.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
/VCMULTITASK=ON Multi-Task Compile Mode
/VCMULTITASKNUMBER=4 Multi-Task Number for Compiling Files
then VFP C++ Compiler can compile faster.


**************************************************
2014/11/12

新增功能:

    1、/VCINCREMENTAL=ON|OFF 是否增量编译模式
    2、/VCSAVEINCREMENTAL=ON|OFF 是否保留增量编译文件

--------------------------------------
   VFP C++ Compiler Update 20141112
--------------------------------------

1, /VCINCREMENTAL=ON|OFF Incremental Compile Mode
   /VCSAVEINCREMENTAL=ON|OFF Save Incremental Compile Files

If we set:
/DEBUG=ON Debug Mode
or /VCINCREMENTAL=ON Incremental Compile Mode
or /VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler will retain the temporary files for incremental compile.

Usually, if we set:
/VCINCREMENTAL=ON Incremental Compile Mode
VFP C++ Compiler only compile the modified files in the VFP project file,
that is VFP C++ Compiler can compile faster.

VFP C++ Compiler will re-compile all files in the VFP project file in some cases:
the compile options have been modified except the following compile options:
/VCENCRYPT=ON|OFF Encrypt Executable File
/VCPACKEXE=ON|OFF Compress Executable File
/VFPLIB=ON|OFF Include VFP Support Library
/VCLIB=ON|OFF Include Visual C++ Library
/VCPACKDLL=ON|OFF Compress Dynamic Link Library File
/VCPACK=ON|OFF Pack Executable File
/DEBUG=ON|OFF Debug Mode
/SILENT=ON|OFF Silent Mode
/VCINCREMENTAL=ON|OFF Incremental Compile Mode
/VCSAVEINCREMENTAL=ON|OFF Save Incremental Compile Files
or the incremental compile files have been deleted,
or the main program file has been modified.

Usually, first, we can set:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
and compile the VFP project.

After this, if we set:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler only compile the modified files in the VFP project file,
that is VFP C++ Compiler can compile faster.

If we need re-compile the VFP project, we can set:
/VCINCREMENTAL=OFF does not compile with Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler will re-compile all files in the VFP project file.


**************************************************
2014/10/8

新增功能:

    1、VFP C++编译软件 for Windows 10。

--------------------------------------
   VFP C++ Compiler Update 20141008
--------------------------------------

1, VFP C++ Compiler for Windows 10

For some reasons, the GetVersion function can't work correctly on windows 8.1 or later,
please refer to:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439%28v=vs.85%29.aspx

I have added a MyGetVersion function in vfpcore.dll instead of the GetVersion function
in kernel32.dll, so it can display "VFP C++ Compiler for Windows 8.1" on windows 8.1,
and display "VFP C++ Compiler for Windows 10" on windows 10.

We MUST update vfpcore.dll to the version 20141008.


**************************************************
2014/9/18

下列问题已修复:

    1、/VCTOLARGEPROC=ON|OFF 是否编译为大程序文件格式(仅适用于VFP 9.0)
    2、私有数据工作期中SET TALK ON问题。

--------------------------------------
   VFP C++ Compiler Update 20140918
--------------------------------------

1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format (only used for VFP 9.0)

For VFP Advanced, it ALWAYS compile to large procedure files format and it has fixed
the large program files BUG, so there is no the compile option for VFP Advanced.

For VFP 6.0, 7.0 and 8.0, it does not support large procedure files format, so there is
no the compile option for VFP 6.0, 7.0 and 8.0.

For VFP 9.0,
If we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
VFP C++ Compiler will compile to large procedure files format and automatically fix
the large program files BUG.

IMPORTANT NOTE:

For the old VFP C++ Compiler,
because the VFP project's version (9.0) is not the same as VFP C++ Compiler's version (10.0),
VFP C++ Compiler will create a temporary program file <PROJECT-NAME>$VCC$.PRG:
ON ERROR *
SET TALK OFF
SET RESOURCE OFF
SET NOTIFY OFF
COMPILE ("VCTEST.PRG")
CLEAR ALL
CLOSE ALL
QUIT
and then run VFP9.EXE <PROJECT-NAME>$VCC$.PRG to compile files,
but there is a problem for this method,
1, the VFP C++ Compiler window lost focus,
2, the VFP 9 windows got focus (although it has the SW_HIDE property),
3, the VFP C++ Compiler window got focus,
so the VFP C++ Compiler window is flashing.

For the new VFP C++ Compiler,
in fact, for ALMOST all files in the project,
1, VFP C++ Compiler compiled to large procedure files format (the VFP Advanced version format),
2, VFP C++ Compiler converted the VFP Advanced version format to the VFP 9.0 version format,
VFP C++ Compiler need not create a temporary program file <PROJECT-NAME>$VCC$.PRG and run it,
so there is no the flash problem, and compile faster.

About the large procedure files format, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vhfox.asp

vfp9 procedure size >64K format

Before vfp9, procedure size <64K, use one WORD can save the size of procedure:
00-01 DW size of procedure

In vfp9, procedure size >64K possible, use one WORD and one DWORD to save the size of procedure:
00-01 DW 0
02-05 DD size of procedure

2, /VCNOTDISPLAY_LARGEPROC=ON|OFF Does Not Display Large Program Files in the Project
(only used for VFP 9.0)

About the large program files BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

Usually, if we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
then all files in the project will be compiled to large procedure files format,
so we needn't to display large program files in the project.

So recommend to set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
/VCNOTDISPLAY_LARGEPROC=ON Does Not Display Large Program Files in the Project

3, SET TALK ON in private data session problem.

If a form or a report use private data session,
some settings are set to the default values,
for example, SET TALK is set to ON.

Usually, we need change some settings, for example,
SET STEP OFF
SET ECHO OFF
SET DEBUG OFF
SET ESCAPE OFF
SET TALK OFF
SET SAFETY OFF
...

For the old VFP C++ Compiler,
it will insert the statement "SET TALK OFF" into the PROCEDUREs Form.Load() and Form.Init(),
but it will not insert the statement "SET TALK OFF" into the PROCEDUREs
DataEnvironment.BeforeOpenTables() and DataEnvironment.Init().

For the new VFP C++ Compiler,
it will insert the statement "SET TALK OFF" into the PROCEDUREs Form.Load(), Form.Init(),
FormSet.Load(), FormSet.Init(),
ToolBar.Init(), ToolBar.sub-objects.Init(),
DataEnvironment.allmethods(), DataEnvironment.sub-objects.allmethods().

Sometimes, VFP C++ Compiler does not know the form use private data session or not.
For example,
in the class library, we can set:
DataSession = 1 && default data session
but in the form (it is subclassed from the class library), we can set:
DataSession = 2 && private data session
then the form (and the class library) use private data session.

When VFP C++ Compiler compile the class library,
it does not know the class library use private data session or not.
So, for the new VFP C++ Compiler,
it ALWAYS insert the statement "SET TALK OFF" into some PROCEDUREs.


**************************************************
2014/9/1

新增功能:

    1、/VCNAMEEXCLUDEVCD2=ON|OFF 是否不编译在字符串定界符内的变量名称
    2、/VCNAMEEXCLUDEVCD3=ON|OFF 是否不编译字段或属性名称

--------------------------------------
   VFP C++ Compiler Update 20140901
--------------------------------------

1, /VCNAMEEXCLUDEVCD2=ON|OFF Does Not Compile Variable Names in String Delimiters

If we set:
/VCNAMEEXCLUDEVCD2=ON Does Not Compile Variable Names in String Delimiters
VFP C++ Compiler does not compile variable names in string delimiters.

For example,
x1 = 123
?"The value of x1 is "+STR(x1,10)
VFP C++ Compiler does not compile the variable name x1.

2, /VCNAMEEXCLUDEVCD3=ON|OFF Does Not Compile Field Names or Property Names

If we set:
/VCNAMEEXCLUDEVCD3=ON Does Not Compile Field Names or Property Names
VFP C++ Compiler does not compile field names or property names.

For example,
fld1 = 123
?STR(t1.fld1,10)
VFP C++ Compiler does not compile the variable name (or field name) fld1.

3, /VCNAMEEXCLUDEVCW=ON|OFF Does Not Compile Variable Names Specified
in the User Reserved Words File

If we want does not compile other variable names,
we can set:
/VCNAMEEXCLUDEVCW=ON Does Not Compile Variable Names Specified in the User Reserved Words File
and add the variable names to the user reserved words file (<PROJECT-NAME>.VCW).

For example,
cancelar
or:
cancelar Caption = "Cancelar"
VFP C++ Compiler only get the first word in per line.

4, /VCNAMEONLYTEXTMERGEDELI=ON|OFF For Text Merge Statements, Only Compile Variable Names
in the Text Merge Delimiters

If we set:
/VCNAMEONLYTEXTMERGEDELI=OFF For Text Merge Statements, Compile All Variable Names in the Statements

For example,
x1 = 123
text
The value of x1 is << x1 >>
endtext

will be compiled to:
_vc_aa = 123
text
The value of _vc_aa is << _vc_aa >>
endtext

If we set:
/VCNAMEONLYTEXTMERGEDELI=ON For Text Merge Statements, Only Compile Variable Names
in the Text Merge Delimiters

For example,
x1 = 123
text
The value of x1 is << x1 >>
endtext

will be compiled to:
_vc_aa = 123
text
The value of x1 is << _vc_aa >>
endtext


**************************************************
2014/4/8

新增功能:

    1、默认编译选项。

--------------------------------------
   VFP C++ Compiler Update 20140408
--------------------------------------

1, Default Compile Options.

     Run the setup program VCSETUP.EXE will write the Default Compile Options
(VFP run file and C/C++ compiler file) to the file default.vcf.

     Run the VFP C++ Compiler VC.EXE will read the Default Compile Options
(VFP run file and C/C++ compiler file) from the file default.vcf.


**************************************************
2014/3/15

新增功能:

    1、VFP C++编译软件安装程序。

--------------------------------------
   VFP C++ Compiler Update 20140315
--------------------------------------

1, VFP C++ Compiler setup program.

     Run the setup program VCSETUP.EXE can Install VFP C++ Compiler to the folder
C:\Program Files\Baiyujia VFP C++ Compiler.

2, Access the Program Files folder problem.

     Usually, we have no "Write" or "Full Control" permission for the Program Files folder
on Windows 7 or later.

     Now VFP C++ Compiler will copy files from the folder C:\Program Files\Baiyujia VFP C++
Compiler\foxrun<n> to the temporary folder such as <PROJECT-FOLDER>\FOXRUNTEMP, and then
generate the C source files such as foxrun*.c in the temporary folder. After compiled
the C source files, VFP C++ Compiler will remove the temporary folder.


**************************************************
2013/12/30

VFP C++编译软件(VFP C++ Compiler)2013 RELEASE。


**************************************************
2013/9/26

下列问题已修复:

    1、更新图标资源失败问题。

--------------------------------------
   VFP C++ Compiler Update 20130926
--------------------------------------

1, Update icon resource failed problem.

Sometimes (for example, some anti-virus program), VFP C++ Compiler update icon resource failed,
then the generated executable file's icon is VFP C++ Compiler's icon.

The new VFP C++ Compiler has fixed this BUG.


**************************************************
2013/5/18

新增功能:

    1、/VCPLUGIN_MYPROTECT=ON|OFF 是否运行MyProtect插件

--------------------------------------
   VFP C++ Compiler Update 20130518
--------------------------------------

1, /VCPLUGIN_MYPROTECT=ON|OFF Run MyProtect Plugin

VFP C++ Compiler can run the specified MyProtect plugin before generate the executable file.

For more details, please refer to the vcsdk\myprotect\readme.txt.


**************************************************
2013/5/15

下列问题已修复:

    1、某些语句优化错误的问题。

--------------------------------------
   VFP C++ Compiler Update 20130515
--------------------------------------

1, Some statements Optimize Code error problem.

The old VFP C++ Compiler can Optimize Code correctly for some statements, for example,
xa=x1(x2)+x3+VAL("aa")+VAL("aaa")
but the old VFP C++ Compiler can not Optimize Code correctly for some statements such as:
xa=x1[x2]+x3+VAL("aa")+VAL("aaa")
xa=x1 (x2)+x3+VAL("aa")+VAL("aaa")
xa=x1 [x2]+x3+VAL("aa")+VAL("aaa")

The new VFP C++ Compiler has fixed this BUG.


**************************************************
2013/5/1

下列问题已修复:

    1、编译生成大的(大于100MB,但仍然小于250MB)可执行文件问题。

--------------------------------------
   VFP C++ Compiler Update 20130501
--------------------------------------

1, Compile and generate a large (greater than 100MB, but less than 250MB) executable file problem.

That is,
the old VFP C++ Compiler can only compile and generate an executable file less than 100MB,
the new VFP C++ Compiler can compile and generate an executable file less than 250MB.

For the dynamic link library file, it can greater than 250MB.
But if the dynamic link library file greater than 250MB, VFP C++ Compiler will not compress it,
because the UPX program can't compress a large executable file (or dynamic link library file)
greater than 250MB.


**************************************************
2012/12/8

VFP C++编译软件(VFP C++ Compiler)2012 RELEASE。


**************************************************
2012/12/1

下列问题已修复:

    1、编译文件时显示Command窗口问题。

--------------------------------------
   VFP C++ Compiler Update 20121201
--------------------------------------

1, The Command window will be showed when compiling files problem.

If the VFP project's version (6.0, 7.0, 8.0, 9.0, 10.0) is not the same as VFP C++ Compiler's version
(9.0, 10.0), VFP C++ Compiler will create a temporary program file <PROJECT-NAME>$VCC$.PRG:
ON ERROR *
SET TALK OFF
SET RESOURCE OFF
SET NOTIFY OFF
COMPILE ("VCTEST.PRG")
CLEAR ALL
CLOSE ALL
QUIT
and then run VFP<n>.EXE <PROJECT-NAME>$VCC$.PRG to compile files.

If the Command window is dockable (in VFP 7.0, 8.0, 9.0, 10.0),
although we call ShellExecuteEx() with SW_HIDE parameter (or _SCREEN.VISIBLE=.F.),
but the Command window will be showed.

The new VFP C++ Compiler has fixed the bug.


**************************************************
2012/11/8

新增功能:

    1、/VCINSERTINITCODE=ON|OFF 是否插入初始化代码

--------------------------------------
   VFP C++ Compiler Update 20121108
--------------------------------------

1, /VCINSERTINITCODE=ON|OFF Insert Init Code

If we set:
/VCINSERTINITCODE=OFF does not Insert Init Code

VFP C++ Compiler will insert the default init code:

IF FILE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL")
ELSE
=MESSAGEBOX(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL"+"!",48,"VFP C++ Compiler")
QUIT
ENDIF
IF FILE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL").AND.;
AT(UPPE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL") ADDITIVE
ENDIF

into the main program file.

If we set:
/VCINSERTINITCODE=ON Insert Init Code

VFP C++ Compiler will insert init code specified in the user init code file (<PROJECT-NAME>.VCI).

We can load a specified .DLL file, for example,

IF !FILE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL")
=MESSAGEBOX(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL"+"!",48,"VFP C++ Compiler")
QUIT
ENDIF
IF FILE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL").AND.;
AT(UPPE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL") ADDITIVE
ENDIF

We can load multiple .DLL files for multiple projects, for example,

IF FILE(SYS(5)+SYS(2003)+"\VCTEST.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST.DLL") ADDITIVE
ENDIF
IF FILE(SYS(5)+SYS(2003)+"\VCTEST1.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST1.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST1.DLL") ADDITIVE
ENDIF
IF FILE(SYS(5)+SYS(2003)+"\VCTEST2.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST2.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST2.DLL") ADDITIVE
ENDIF


**************************************************
2012/10/18

下列问题已修复:

    1、DODEFAULT()函数问题。

--------------------------------------
   VFP C++ Compiler Update 20121018
--------------------------------------

1, DODEFAULT() function problem.

For the older version,
sometimes, the DODEFAULT() function will run the parent-class code twice or
will not run the parent-class code.

The new VFP C++ Compiler has fixed the bug.


**************************************************
2012/9/23

新增功能:

    1、自动使用“单步编译模式”编译ON ERROR command和ON ERROR之间的语句。

--------------------------------------
   VFP C++ Compiler Update 20120923
--------------------------------------

1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ERROR command and ON ERROR.

For example,

ON ERROR lok = .f.
lok = .t.
THISFORM.OLecontrol1.COMmPort=99
IF lOk
    WAIT WINDOW 'port open'
    thisform.olecontrol1.Enabled=.t.
ELSE
    WAIT WINDOW 'port not open'
ENDIF
ON error

For the older version,
it will compile the vfp code:

lok = .t.
THISFORM.OLecontrol1.COMmPort=99
IF lOk
    WAIT WINDOW 'port open'
    thisform.olecontrol1.Enabled=.t.
ELSE
    WAIT WINDOW 'port not open'
ENDIF

to one C funciton __VC_TEST_xxx().

It will run all code in the C funciton __VC_TEST_xxx(),
and then generates an error,
and then call the ON ERROR handling (run the code: lok = .f.).

The new VFP C++ Compiler will automatic compile the vfp code between:

ON ERROR xxx
...
...
...
ON ERROR (or ON ERROR *, or ON ERROR &xxx)

as "Single Step Compile Mode":

ON ERROR lok = .f.
__VC_TEST_A(1)
__VC_TEST_A(2)
IF __VC_TEST_A(3)
__VC_TEST_A(4)
__VC_TEST_A(5)
ELSE
__VC_TEST_A(6)
ENDIF
ON error

then it can run fine.


**************************************************
2012/9/13

下列问题已修复:

    1、自定义属性的尾部空格问题。

--------------------------------------
   VFP C++ Compiler Update 20120913
--------------------------------------

1, The trailing spaces of the user-define property problem.

For example,

sensitive_altgr = .F.<cr><lf>
action_ctrl =  <cr><lf>
action_alt =  <cr><lf>
_memberdata = ...

There are 2 spaces between "action_ctrl =" and <cr><lf>,
the old VFP C++ Compiler will cut the 2 spaces,
it will be converted to:

sensitive_altgr = .F.<cr><lf>
action_ctrl =<cr><lf>
action_alt =<cr><lf>
_memberdata = ...

then vfp will get wrong properties of action_ctrl and action_alt.

The new VFP C++ Compiler will reserved the spaces between "action_ctrl =" and <cr><lf>.


**************************************************
2012/9/5

新增功能:

    1、支持Visual C++ 11.0(Visual Studio 2012)编译器。


**************************************************
2012/8/12

下列问题已修复:

    1、FOR EACH ... IN collection语句,但collection中没有任何元素的问题。


**************************************************
2012/7/18

新增功能:

    1、/VCFILESEARCHPATH=... 文件搜索路径

--------------------------------------
   VFP C++ Compiler Update 20120718
--------------------------------------

1, /VCFILESEARCHPATH=... File Search Path

Now you can set the file search path for class library files and header files.


**************************************************
2012/7/9

VFP C++编译软件(VFP C++ Compiler) 10.0 for Windows。

--------------------------------------
   VFP C++ Compiler Update 20120709
--------------------------------------

1, VFP C++ Compiler 10.0 for Windows.

Now VFP C++ Compiler Support for VFP Advanced.

If we set:
/VFPLIB=ON Include VFP Support Library
for VFP Advanced project,
VFP C++ Compiler compiled and generated executable file contain the code of vfpar.dll
and vfpcore.dll, so the executable file need not vfpar.dll and vfpcore.dll to run.


**************************************************
2012/4/18

下列问题已修复:

    1、重建项目时项目文件损坏的问题。
    2、编译可以用于多个项目的变量名称的简单方法。

--------------------------------------
   VFP C++ Compiler Update 20120418
--------------------------------------

1, The project file is invalid after rebuild the project.

Sometimes VFP C++ Compiler will rebuild the project, for example,
BUILD EXE ("vctest.exe") FROM ("vctest.pjx")
Someone said sometimes the project file is invalid after rebuild the project.

Now VFP C++ Compiler rebuild the executable file from a backup project file, for example,
COPY FILE ("vctest.pjx") TO ("vctest$vcproject$.pjx")
COPY FILE ("vctest.pjt") TO ("vctest$vcproject$.pjt")
BUILD EXE ("vctest.exe") FROM ("vctest$vcproject$.pjx")
Then VFP C++ Compiler will not write the original project file.

2, The simple method of Compile Variable Names for Multiple Projects.

Now to compile variable names for multiple projects is more simple, please refer to:
vctest\vctest_multiproj\readme.txt
vctest\vctest_multiproj_simple\readme.txt


**************************************************
2012/3/28

新增功能:

    1、/VCTOLARGEPROC=ON|OFF 是否编译为大程序文件格式
    2、/VCNOTDISPLAY_LARGEPROC=ON|OFF 是否不显示项目中包含的大程序文件
    3、/VCNOTDISPLAY_RELATIONALEXPR=ON|OFF 是否不显示无效的RelationalExpr表达式

--------------------------------------
   VFP C++ Compiler Update 20120328
--------------------------------------

1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format

If we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
VFP C++ Compiler will compile to large procedure files format and automatically fix
the large program files BUG.

About the large procedure files format, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vhfox.asp

vfp9 procedure size >64K format

Before vfp9, procedure size <64K, use one WORD can save the size of procedure:
00-01 DW size of procedure

In vfp9, procedure size >64K possible, use one WORD and one DWORD to save the size of procedure:
00-01 DW 0
02-05 DD size of procedure

2, /VCNOTDISPLAY_LARGEPROC=ON|OFF Does Not Display Large Program Files in the Project

About the large program files BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

Usually, if we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
then all files in the project will be compiled to large procedure files format,
so we needn't to display large program files in the project,
we can set:
/VCNOTDISPLAY_LARGEPROC=ON Does Not Display Large Program Files in the Project

3, /VCNOTDISPLAY_RELATIONALEXPR=ON|OFF Does Not Display Invalid RelationalExpr Expressions

About the invalid relationalexpr expressions BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix4.asp

4, Another vfp9 fix - LARGE PROCEDURE IN THE FORM, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix3.asp


**************************************************
2012/3/22

新增功能:

    1、无效的RelationalExpr表达式。

--------------------------------------
   VFP C++ Compiler Update 20120322
--------------------------------------

1, Invalid RelationalExpr Expressions.

About the Invalid RelationalExpr Expressions BUG, Please refer to:
http://www.baiyujia.com/vfpdocuments/f_vfp9fix4.asp

If VFP C++ Compiler show the WARNING MESSAGE: Invalid RelationalExpr Expressions,
we MUST fix the Invalid RelationalExpr Expressions BUG.


**************************************************
2012/3/18

新增功能:

    1、/VCEXPANDEXPEVALUATE=ON|OFF 是否使用EVALUATE()函数扩展表达式
    2、/VCEXPANDEXPCHR=ON|OFF 是否使用CHR()函数扩展表达式

--------------------------------------
   VFP C++ Compiler Update 20120318
--------------------------------------

1, /VCEXPANDEXPEVALUATE=ON Expand Expression With EVALUATE() Function

To expand expression with EVALUATE() function, for example,
x1="ABC"
will be expanded to:
x1=(EVALUATE('"ABC"'))

2, /VCEXPANDEXPCHR=ON|OFF Expand Expression With CHR() Function

To expand expression with CHR() function, for example,
x1="ABC"
will be expanded to:
x1=(CHR(65)+CHR(66)+CHR(67))


**************************************************
2012/3/1

新增功能:

    1、可执行文件压缩率优化。

--------------------------------------
   VFP C++ Compiler Update 20120301
--------------------------------------

1, Executable file compression rate optimization.

Now the encrypted executable file compression rate between 10% and 30%.

IMPORTANT:

You MUST update vfpcore.dll to the version 20120301.

The vfpcore.dll version 20120301 is compatible for the programs compiled with the
old VFP C++ Compiler, that is you can update vfpcore.dll to the version 20120301,
the old programs (and the new programs) compiled with VFP C++ Compiler can run well.


**************************************************
2012/1/8

新增功能:

    1、项目中包含的大程序文件。

--------------------------------------
   VFP C++ Compiler Update 20120108
--------------------------------------

1, Large Program Files in the Project.

About the Large Program Files BUG, Please refer to:
http://www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

If VFP C++ Compiler show the WARNING MESSAGE: Large Program Files in the Project,
recommend to fixed the Large Program Files BUG.


**************************************************
2011/12/8

VFP C++编译软件(VFP C++ Compiler)2011 RELEASE。


**************************************************
2011/12/1

新增功能:

    1、/VCNAMEMULTIPROJ=ON|OFF 是否编译可以用于多个项目的变量名称

--------------------------------------
   VFP C++ Compiler Update 20111201
--------------------------------------

1, /VCNAMEMULTIPROJ=ON|OFF Compile Variable Names for Multi Project

That is we can build 2 or more projects,
then we can run the statements in test.exe such as:
DO test1.exe
DO xxx in test1.exe

Please refer to the vctest\vctest_multiproj\readme.txt.


**************************************************
2011/11/16

新增功能:

    1、/VCNAMECATEGORY=ON|OFF 是否编译类变量名称
       /VCNAMEMACRO=ON|OFF 是否编译宏变量名称

--------------------------------------
   VFP C++ Compiler Update 20111116
--------------------------------------

1, /VCNAMECATEGORY=ON|OFF Compile Category Variable Names
   /VCNAMEMACRO=ON|OFF Compile Macro Variable Names

We can Compile (or don't compile) Category (or Macro) Variable Names.

About "Variable Names List ...",
for "Only Compile Variable Names in the User Variable Names File"
and "Does Not Compile Variable Names Specified in the User Reserved Words File",
now we can input the Category Variable Names in the editbox such as:
l* && local variables
g* && public variables


**************************************************
2011/11/8

新增功能:

    1、/VCSTEP=ON|OFF 是否单步编译模式

--------------------------------------
   VFP C++ Compiler Update 20111108
--------------------------------------

1, /VCSTEP=ON|OFF Single-step Compile Mode

     The default is OFF, VFP C++ Compiler compiled many VFP statements to one C function.
     If set to ON, VFP C++ Compiler compiled only one VFP statement to one C function.

To resolved the ON ERROR, RETURN TO, RETRY statements problem,

Method 1 (the simple method):
we can set:
/VCSTEP=ON Single-step Compile Program
then VFP C++ Compiler will compile the ON ERROR, RETURN TO, RETRY statements same as VFP.

The /VCSTEP=ON|OFF option is used for all files in the project.

This method is simple, we needn't to edit our code,
but the Structured Programming Commands such as:
     DO CASE ... ENDCASE
     DO WHILE ... ENDDO
     FOR EACH ... ENDFOR
     FOR ... ENDFOR
     IF ... ENDIF
     SCAN ... ENDSCAN
     TRY ... ENDTRY
will leave in the exe file (VFP code), not in the dll file (C code),
so the code security will be reduced.

Recommend to set:
/VCSTEP=ON Single-step Compile Program
for our old project,
because we needn't to edit our code and the compiled code will run fine.

Please refer to:
vctest\vctest_on_error_vcstep\vctest.vcf, vctest.prg
vctest\vctest_return_to_vcstep\vctest.vcf, vctest.prg
vctest\vctest_retry_vcstep\vctest.vcf, vctest.prg

Method 2 (the recommend method):
Or we can use =[FOXSTEP ON|OFF] statement to set Single-step Compile for some files
(or some code), other files will not be Single-step Compiled.

That is we can set Single-step Compile for some code (relate to the ON ERROR, RETURN TO,
RETRY statements), the code security will be reduced.
Other code will not be Single-step Compiled, so the other code is more secure.

Please refer to:
vctest\vctest_on_error_foxstep\vctest.prg
vctest\vctest_return_to_foxstep\vctest.prg
vctest\vctest_retry_foxstep\vctest.prg

Method 3 (the old method):
we can use =[FOXRUN ON|OFF] statement to do it too.

Please refer to:
vctest\vctest_on_error\vctest.prg
vctest\vctest_return_to\vctest.prg
vctest\vctest_retry\vctest.prg


**************************************************
2011/11/1

下列问题已修复:

    1、同时运行多个报表问题。

--------------------------------------
   VFP C++ Compiler Update 20111101
--------------------------------------

1, Run more than one report at the same time problem.

I have added 2 options in the "Form and Report Compile Options":

/VCFRX_CLEANDATA_SHOW_POSITION=ON|OFF Clean Data for Show Position

     If we set (the default setting):
     /VCFRX_CLEANDATA_SHOW_POSITION=OFF does not Clean Data for Show Position
     then VFP C++ Compiler does not Clean Data for Show Position.

     Usually, we can set:
     /VCFRX_CLEANDATA_SHOW_POSITION=ON Clean Data for Show Position
     then VFP C++ Compiler will run command:
     REPLACE ALL curpos WITH .F.
     to Clean Data for Show Position.

/VCFRX_AUTORELEASEVARIABLES=ON|OFF Automatic Release Variables Defined
in Report's Procedure Init

     If we set (the default setting):
     /VCFRX_AUTORELEASEVARIABLES=OFF does not Automatic Release Variables Defined
     in Report's Procedure Init, then VFP C++ Compiler does not Automatic Release
     Variables Defined in Report's Procedure Init.

     If there is no more than one report at the same time, that is only one report
     at any time, then we can set:
     /VCFRX_AUTORELEASEVARIABLES=ON Automatic Release Variables Defined
     in Report's Procedure Init, then VFP C++ Compiler will Automatic Release Variables
     Defined in Report's Procedure Init.

For example,

SELE 0
USE t1
DEFINE WIND w1 FROM 0,0 TO 30,30
*ACTI WIND w1
REPO FORM r1 PREVIEW WIND w1 NOWAIT

SELE 0
USE t2
DEFINE WIND w2 FROM 0,40 TO 30,70
*ACTI WIND w2
REPO FORM r2 PREVIEW WIND w2 NOWAIT

...

For the code, we MUST set (the default setting):
/VCFRX_AUTORELEASEVARIABLES=OFF does not Automatic Release Variables Defined
in Report's Procedure Init


**************************************************
2011/10/1

兼容性问题修复:

    1、修复与Microsoft Virtual PC、Oracle VM VirtualBox等虚拟机软件的兼容性问题。

--------------------------------------
   VFP C++ Compiler Update 20111001
--------------------------------------

1, Fix the compatible problem with virtual machine products such as Microsoft Virtual PC
and Oracle VM VirtualBox.

If you install Microsoft Virtual PC or Oracle VM VirtualBox,
the old VFP C++ Compiler (VC.EXE) can't start.
Please update to the new VFP C++ Compiler 20111001.


**************************************************
2011/9/22

新增功能:

    1、/VCMOVEGOTO=ON|OFF 是否移动GOTO语句

--------------------------------------
   VFP C++ Compiler Update 20110922
--------------------------------------

1, /VCMOVEGOTO=ON|OFF Move GOTO Statement

     To move statement, for example,
     statement
     will be moved to:
     =[GOTO FOXRUN_GOTO_LABEL_XXX_START]
     =[FOXRUN_GOTO_LABEL_XXX_END:]
     ...
     =[FOXRUN_GOTO_LABEL_XXX_START:]
     statement
     =[GOTO FOXRUN_GOTO_LABEL_XXX_END]

If we set:
/VCMOVEGOTO=ON Move GOTO Statement
that is:
=[GOTO FOXRUN_GOTO_LABEL_XXX_START]
=[GOTO FOXRUN_GOTO_LABEL_XXX_END]
and other =[GOTO ...] statements will be moved again.


**************************************************
2011/9/5

新增功能:

    1、支持Visual C++ 10.0(Visual Studio 2010)编译器。

--------------------------------------
   VFP C++ Compiler Update 20110905
--------------------------------------

1, Support for Visual C++ 10.0.

     IMPORTANT NOTE:

     The program compiled with Visual C++ 10.0 only run on Windows XP SP2 or later.


**************************************************
2011/8/16

下列问题已修复:

    1、TRY ... ENDTRY语句问题。

--------------------------------------
   VFP C++ Compiler Update 20110816
--------------------------------------

1, About Encrypt and Compress Executable File

If we set:
/VCENCRYPT=ON Encrypt Executable File
/VCPACKEXE=ON Compress Executable File
then the Executable File can be compressed, the compression ratio is about 80%.

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
/VCPACKEXE=ON Compress Executable File
then the Executable File can be compressed very small, the compression ratio is about 20%.

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
/VCPACKEXE=OFF does not Compress Executable File
then the Executable File can't be compressed,
but you can use other third-party VFP encryption products such as DeFox and FoxShell to
encrypt/compress the Executable File.

2, TRY ... ENDTRY statement problem.

An example from DV_FOXHELP9.CHM:

CLEAR
ON ERROR DO errorHandler && Create a functional error handler to test.
oMyObject=CREATEOBJECT("myClass")
oMyObject.myMethod1()
* oMyObject.myMethod2()  && Remove comment character to test this line.

DEFINE CLASS myClass AS Custom

   PROCEDURE myMethod1
      ? "myMethod1"
      TRY
         ? "Calling myMethod2 in TRY block for myMethod1."
         THIS.myMethod2()
      CATCH TO omyError
         ? "Entered CATCH block for myMethod1. Caught: ", ;  
            omyError.ErrorNo, " ", omyError.Message
      ENDTRY
   ENDPROC

   PROCEDURE myMethod2
      ?
      ? "myMethod2"
      ? "Generating an error in myMethod2."
      x=y         && Variable y does not exist. CATCH handles this error.
      ? "This line displays if CATCH does not handle the prece* error."
   ENDPROC
ENDDEFINE

If we call myMethod2() in a TRY ... ENDTRY block,
      ? "This line displays if CATCH does not handle the prece* error."
will not be run.

If we call myMethod2() not in a TRY ... ENDTRY block,
      ? "This line displays if CATCH does not handle the prece* error."
will be run.

I have found a useful function SYS(2410) - Error Handler can resolved this problem.

when causes an error,

if SYS(2410)='1' then call _Error(), the next statements will not be run.

else

the next statements in the C function will be run continue,
at the end, call the _Error(), then jump to the error process program.

Now VFP C++ Compiler can run TRY ... ENDTRY code same as VFP.


**************************************************
2011/8/1

新增功能:

    1、表单、报表编译选项。

--------------------------------------
   VFP C++ Compiler Update 20110801
--------------------------------------

1, Form and Report Compile Options.

For more details, please refer to others\readme*.txt.

IMPORTANT:

     Some program use a TextBox object to call a UDF function and set Print When is Flase,
     so the UDF function can be called normal, but not print anything in the report.
     In this case, we can't Delete Data When Print When is Flase, so we MUST set:
     /VCFRX_DELETEDATA_WHEN_PRINTWHENISFALSE=OFF does not Delete Data When Print When
     is Flase (Supexpr==".F.")

The old VFP C++ Compiler will automatic Delete Data When Print When is Flase.
So please update to the new VFP C++ Compiler 20110801.

2. Please Download VFP C++ Compiler Runtime Library from:
   http://www.baiyujia.com/f_downloadproc_vclib.asp
   the password is www.baiyujia.com.

Compress options in make_packexe.bat and make_packdll.bat have changed to:
upx --best --compress-icons=0 %1

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
then the Executable File can be compressed very small,
it's about 15% of the original file size.

3. If you use Mycheck SDK and selected C/C++ compiler file is foxrun8\make.bat or foxrun9\make.bat,
   for some reasons about SEH, the dll code can't run correctly on Windows XP.
   The new VFP C++ Compiler 20110801 has fixed this BUG.

If we select Visual C++ 8.0/9.0 to compile foxrun*.c,
then the foxrun.dll include the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG data,
the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG save some reserved SEH data,
and it is only used on Windows NT, Windows 2000 and Windows XP.

The new VFP C++ Compiler 20110801 will clear the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG data,
then the program can run correctly on Windows XP (and Windows vista and Windows 7 and after).


**************************************************
2011/7/25

新增功能:

    1、设置=[FOXRUN OFF]后,扩展代码无效。

--------------------------------------
   VFP C++ Compiler Update 20110725
--------------------------------------

1, EXTENDED CODE is not available when set =[FOXRUN OFF].

For example,
in the vctest.prg:
...
=[foxrun off]
...
=[include mycheck_isdebuggerpresent.c]
...
=[foxrun on]
...

The statement:
=[include mycheck_isdebuggerpresent.c]
it is only a normal VFP statement, and it do nothing.

The new version VFP C++ Compiler will write a warning message to the vctest.err:
EXTENDED CODE is not available when set =[FOXRUN OFF].
=[include mycheck_isdebuggerpresent.c]


**************************************************
2011/6/26

新增功能:

    1、/APPERROR=ON|OFF 是否应用程序错误日志文件

--------------------------------------
   VFP C++ Compiler Update 20110626
--------------------------------------

1, VFP C++ Compiler version 20110401-20110625 has a BUG:

IF x1>0 ; && xxx
and x2>0 && xxx
...

the old VFP C++ Compiler can't process these statements correctly.

Please update to the new version VFP C++ Compiler 20110626.

2, New Functions: /APPERROR=ON|OFF Application Error Log File

Usually, the code:

?x1
?x2
?x3

VFP C++ Compiler only return the last error:
Variable "x3" is not found

If we set:
/APPERROR=ON Application Error Log File
and then compile the project,
and then run the application,
it will generate an Error Log File include all errors, like:
06/27/11 08:02:50 AM VCTEST: (170) ?X1 
06/27/11 08:02:50 AM VCTEST: (170) ?X2 
06/27/11 08:02:50 AM VCTEST: (170) ?X3 
now we can know it causes 3 errors.

the function is only used for test/debug,
and please set:
     /VCOPT=OFF does not Optimize Code
     /VCOPT2=OFF does not Optimize Code Level II
because if we set:
     /VCOPT=ON Optimize Code
     /VCOPT2=ON Optimize Code Level II
the error message in the Error Log File is p-code data,
it is hard to understand.


**************************************************
2011/6/1

下列问题已修复:

    1、修复“资源文件不匹配”错误。


**************************************************
2011/5/18

新增功能:

    1、数据对齐:1字节、2字节、4字节、8字节、16字节。


**************************************************
2011/5/1

新增功能:

    1、/VCOPT2=ON|OFF 是否优化代码Ⅱ。
    2、支持Windows 7(x86/x64)。

--------------------------------------
   VFP C++ Compiler Update 20110501
--------------------------------------

1, /VCOPT2=ON|OFF Optimize Code Level II.

If we set /VCOPT=ON,
VFP C++ Compiler will Optimize the _Execute() function.

If we set /VCOPT2=ON,
VFP C++ Compiler will Optimize the _Evaluate() function,
then the generated code is smaller and run faster.

2, Support for Windows 7 (x86/x64).

The new version only fix some directories access problem such as:
C:\Windows\System32 and C:\Windows\SysWOW64,
C:\Program Files and C:\Program Files (x86),
then VFP C++ Compiler can normal run on Windows 7 x64 system.
VFP C++ Compiler is a 32-bit program.


**************************************************
2011/4/6

新增功能:

    1、移动语句编译速度优化。

--------------------------------------
   VFP C++ Compiler Update 20110406
--------------------------------------

1. Move Statement compiled speed optimization.

Now VFP C++ Compiler is faster when Move Statement for large program.


**************************************************
2011/3/6

新增功能:

    1、局部编译选项。

--------------------------------------
   VFP C++ Compiler Update 20110306
--------------------------------------

1. LOCAL COMPILE OPTION.

We can set a higher (or lower) encryption options for some code,
please refer to vcsdk\mycheck\mycheck.prg.


**************************************************
2011/2/22

新增功能:

    1、/VCSCXINITMODLIST=... 表单对象属性转换为INIT事件代码模数列表
    2、/VCFRXINITMODLIST=... 报表表达式转换为数据环境INIT事件代码模数列表


**************************************************
2011/2/18

新增功能:

    1、/VCNAMEONLYVCV=ON|OFF 是否仅编译用户变量名称文件中指定的变量名称
    2、/VCNAMEEXCLUDEVCW=ON|OFF 是否不编译用户保留字文件中指定的变量名称


**************************************************
2011/1/1

新增功能:

    1、支持DeFox、FoxShell等第三方VFP加密软件。

--------------------------------------
   VFP C++ Compiler Update 20110101
--------------------------------------

1. Support third-party VFP encryption products such as DeFox and FoxShell.

Please don't select "Encrypt Executable File",
then VFP C++ Compiler will generate a standard VFP executable file,
then we can use DeFox or FoxShell to encrypt it.


**************************************************
2010/12/8

VFP C++编译软件(VFP C++ Compiler)2010 RELEASE。


**************************************************
2010/11/18

下列问题已修复:

    1、如果项目已经移动,则自动更新项目。
    2、Mycheck问题修复。


**************************************************
2010/10/8

新增功能:

    1、VFP C++编译软件开发工具包。


**************************************************
2010/10/1

新增功能:

    1、/VCPACK=ON|OFF 是否打包可执行文件


**************************************************
2010/9/1

新增功能:

    1、压缩动态链接库文件优化。


**************************************************
2010/8/8

下列问题已修复:

    1、项目中包含重复文件问题。


**************************************************
2010/7/28

新增功能:

    1、/VCFASTDECOMPIFCONDNUMBER=n 快速分解IF语句条件个数
    2、/VCFASTDECOMPIFRECURSELEVEL=n 快速分解IF语句递归级数
    3、/VCFASTDECOMPIFCODELINENUMBER=n 快速分解IF语句代码行数
    4、/VCFASTDECOMPIFCODELENGTH=n 快速分解IF语句代码长度
    5、/VCFASTDECOMPDOCASECASENUMBER=n 快速分解DO CASE语句CASE个数
    6、/VCFASTDECOMPDOCASECONDNUMBER=n 快速分解DO CASE语句条件个数
    7、/VCFASTDECOMPDOCASERECURSELEVEL=n 快速分解DO CASE语句递归级数
    8、/VCFASTDECOMPDOCASECODELINENUMBER=n 快速分解DO CASE语句代码行数
    9、/VCFASTDECOMPDOCASECODELENGTH=n 快速分解DO CASE语句代码长度


**************************************************
2010/7/11

新增功能:

    1、内联C语句
    2、内联汇编语句
    3、包含C文件
    4、包含汇编文件


**************************************************
2010/7/1

新增功能:

    1、/VCANTIDISASM=ON|OFF 是否防止反汇编


**************************************************
2010/6/11

兼容性问题修复:

    1、忽略CASE、DO WHILE、FOR EACH、FOR、IF、SCAN等语句尾部的THEN、DO命令:
    CASE ... [THEN | DO]
    DO WHILE ... [THEN | DO]
    FOR EACH ... [THEN | DO]
    FOR ... [THEN | DO]
    IF ... [THEN | DO]
    SCAN ... [THEN | DO]


**************************************************
2010/5/1

下列问题已修复:

    1、支持数字签名。


**************************************************
2010/4/15

新增功能:

    1、表单类文件编译速度优化。


**************************************************
2010/4/5

新增功能:

    1、/VCNAMETYPE=4|5 变量名称编码类型:MD5编码-16|32字符


**************************************************
2010/3/12

新增功能:

    1、<项目名称>.VCD2:在字符串定界符内的变量名称列表文件


**************************************************
2010/2/1

新增功能:

    1、/VCEXPANDINLINE=ON|OFF 是否展开内联函数


**************************************************
2010/1/1

新增功能:

    1、/VCMOVE=ON|OFF 是否移动语句


**************************************************
2009/12/28

VFP C++编译软件(VFP C++ Compiler)2009 RELEASE。


**************************************************
2009/11/18

下列问题已修复:

    1、分解复合条件语句时条件为空值(.NULL.)问题。


**************************************************
2009/10/25

VFP C++编译软件(VFP C++ Compiler) 9.00 for Windows。


**************************************************
2009/10/20

新增功能:

    1、/VCKEYWORD=ON|OFF 是否编译关键字


**************************************************
2009/10/15

新增功能:

    1、/VCPACKEXE=ON|OFF 是否压缩可执行文件


**************************************************
2009/10/1

新增功能:

    1、更多编译选项。


**************************************************
2009/9/18

下列问题已修复:

    1、FOR EACH ... IN collection语句问题。


**************************************************
2009/9/8

新增功能:

    1、/VCENCRYPT=ON|OFF 是否加密可执行文件


**************************************************
2009/8/28

新增功能:

    1、标号和GOTO语句。


**************************************************
2009/8/18

新增功能:

    1、/VCDECOMPCOND=ON|OFF 是否分解复合条件语句

下列问题已修复:

    1、在某些情况下编译生成的DLL文件用SET LIBRARY TO加载失败。


**************************************************
2009/8/5

新增功能:

    1、支持大项目分割为多个函数库合并编译。


**************************************************
2009/7/22

新增功能:

    1、/VCEXPANDEXP=ON|OFF 是否使用IIF()函数扩展表达式


**************************************************
2009/4/26

兼容性问题修复:

    1、忽略ENDIF、ENDCASE、ENDDO、ENDFOR、ENDSCAN、ENDTRY等语句之后的注释。
    2、忽略#IF .F.与#ELIF、#ELSE、#ENDIF之间的注释或语句。
    3、忽略#INCLUDE指定的头文件(.h)中的非预处理命令。


**************************************************
2009/3/26

下列问题已修复:

    1、QUIT、CANCEL语句未执行ON SHUTDOWN例程问题。


**************************************************
2009/1/15

新增功能:

    1、支持COM服务程序编译。


**************************************************
2009/1/10

新增功能:

    1、/APPDEBUG=ON|OFF 是否应用程序调试模式


**************************************************
2008/12/28

VFP C++编译软件(VFP C++ Compiler)2008 RELEASE。


**************************************************
2008/12/20

下列问题已修复:

    1、\、\\语句行尾的;问题。
    2、#INCLUDE "FILENAME"('FILENAME'、[FILENAME])语句问题。
    3、DEFINE CLASS定义的属性位于PROCEDURE|FUNCTION之后的问题。
    4、#DEFINE编译速度优化。


**************************************************
2008/12/8

下列问题已修复:

    1、RETURN @语句问题。
    2、RETURN object语句问题。
    3、SET DEVELOPMENT ON语句问题。
    4、_ACCESS方法问题。
    5、_ASSIGN方法问题。


**************************************************
2008/12/1

新增功能:

    1、支持项目中包含FXP/APP/EXE文件。
    2、主界面中增加“调试模式”。


**************************************************
2008/11/10

新增功能:

    1、支持Visual C++ 9.0(Visual Studio 2008)编译器。


**************************************************
2008/10/1

新增功能:

    1、支持版本信息。


**************************************************
2008/8/31

下列问题已修复:

    1、在某些情况下编译处理时程序可能会停止响应。

新增功能:

    1、支持多个API函数库合并编译。


**************************************************
2008/8/8

新增功能:

    1、VFP运行库已包含:简体中文VFP运行库、繁体中文VFP运行库、英文VFP运行库。


**************************************************
2008/6/13

新增功能:

    1、/VCOPT=ON|OFF 是否优化代码


**************************************************
2008/5/25

新增功能:

    1、/VCPACKDLL=ON|OFF 是否压缩动态链接库文件


**************************************************
2008/5/15

新增功能:

    1、新增优化编译功能,部分语句(如x=x+1等)优化编译后比VFP自然编译运行速度更快!


**************************************************
2008/3/15

下列问题已修复:

    1、#DEFINE定义的表达式中的变量问题。

新增功能:

    1、防止FoxTools反编译。


**************************************************
2008/2/15

下列问题已修复:

    1、代码页错误地更改为当前操作系统代码页。
    2、PRIVATE ALL后不能访问__VC*等PUBLIC变量。
    3、QUIT、CANCEL后不能退出VFP问题。
    4、使用相对路径访问文件问题。
    5、表单使用扩展属性问题。
    6、表单Init事件包含PARAMETERS语句问题。
    7、报表自动打开数据环境中的表问题。
    8、类库Top、Left、Height、Width属性问题。

新增功能:

    1、保留字新增FOXTOOLS.FLL函数名及常用WIN32API函数名,DECLARE申明的API函数名也是保留字。
    2、/VCLIB=ON|OFF 是否包含VC运行库,VC运行库位于System目录下。
    3、语言选项LANGUAGE=CN|CHS|CHT|EN。


********** END OF HISTORY.TXT ********************