From 6dd94a8d872da64df5343ada44b7f17c1ed863c7 Mon Sep 17 00:00:00 2001 From: xinjie <38008973+vfp9@users.noreply.github.com> Date: Tue, 29 Apr 2025 22:55:08 +0800 Subject: [PATCH 1/4] [DOCC]Simultaneous update of Simplified Chinese documentation --- docs/Help_ZH-CN/Topics/VersionHistory.xml | 1283 +++++++++++---------- 1 file changed, 651 insertions(+), 632 deletions(-) diff --git a/docs/Help_ZH-CN/Topics/VersionHistory.xml b/docs/Help_ZH-CN/Topics/VersionHistory.xml index adf0121e5e..3bebc4cab0 100644 --- a/docs/Help_ZH-CN/Topics/VersionHistory.xml +++ b/docs/Help_ZH-CN/Topics/VersionHistory.xml @@ -1,6 +1,6 @@  - + 版本历史 Changes @@ -34,13 +34,15 @@ 新特性
  • 为数组添加了额外的排序函数 ASortFunc() 和 ASortEx(),支持 .Net 风格的排序 (#1683)
  • -
  • 允许注册特殊错误处理程序,用于在宏编译期间处理错误 (#1686)
    要使用此功能,请声明一个具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • -
  • 为 VFP 函数 GoMonth()、Quarter()、Week()、DMY() 和 MDY() 添加了非类型重载 (#1724)
  • -
  • 在 VFP 运行时库中实现了 Seek() 函数 (#1718)
  • -
  • 允许注册特殊错误处理程序,在宏编译过程中出现错误时调用 (#1686)
    要使用此功能,请声明具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • +
  • 为 VFP 函数 GoMonth()、Quarter()、Week()、DMY() 和 MDY() 添加了非类型重载 (#1724)
  • +
  • 在 VFP 运行时库中实现了 Seek() 函数 (#1718)
  • +
    + +
  • 允许注册特殊错误处理程序,用于在宏编译期间处理错误 (#1686)
    要使用此功能,请声明一个具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • +
    然后像这样将其注册为代码块错误处理程序:
    RuntimeState.CodeBlockErrorHandler := CodeBlockErrorHandler
    当函数/方法返回 NULL 时,就会抛出异常。
    当函数/错误处理程序返回一个代码块时,该代码块将用于评估宏。例如

    FUNCTION CodeBlockErrorHandler(cMacro AS STRING, oEx AS Exception) AS ICodeblock
      ? Mmacro
      ? oEx:Message
      // 出现类似错误时,Visual Objects 返回 NIL
    RETURN {|| NIL }

    FUNCTION Start() AS VOID STRICT
      RuntimeState.MacroCompilerErrorHandler := CodeBlockErrorHandler
      ? &("'aaa'bbb'")    // 单引号数量不均,错误。
                          // 返回 NIL,因为 ErrorHandler 返回的代码块为 NIL
    Bug fixes @@ -73,7 +75,7 @@
  • 修复了 MouseMove( oMev) 未被 FixedText 调用的问题(#1680)
  • -
  • 为窗口类添加了一个属性 EnableDispatch。当设置为 TRUE 时,将调用 Dispatch() 方法。(#1721)
  • +
  • 为窗口类添加了一个属性 EnableDispatch。当设置为 TRUE 时,将调用 Dispatch() 方法。(#1721)
  • Visual Studio 集成 Bug修复 @@ -81,6 +83,11 @@
  • 修复了编辑器在显示带注释的多行语句的区域标记时的问题  (#1667)
  • 修复了 "is not null" 代码模式的错误高亮问题 (#1699)
  • + + 新特性 + +
  • 已添加对编辑器命令 Edit.ToggleLineComment 和 Edit.ToggleBlockComment 的支持
  • +
    XIDE 常规 @@ -91,10 +98,22 @@
  • 修复了错误地将 Func<T> 高亮为关键字的问题
  • 项目/应用程序导出现在还包括本地资源文件 (.rc)
  • 对每日提示窗口进行了一些改进
  • +
  • 点击 “错误”工具窗口中相应列的标题,现在可按文件、应用程序等对信息进行排序
  • +
  • 改进了 “断点”、“书签 ”和 “监视 ”工具窗口中 “全部删除/移除 ”工具栏按钮的功能
  • +
  • 修正了在调试器中修改局部变量值的问题(但仍无法修改对象成员)
  • +
  • 对编辑->排序实体命令进行了大量改进
  • +
    + + 插件系统 + +
  • 添加了回调方法 Plugin:OnProjectItemSelected(),当在项目工具窗口中选择任何项目时,该方法将被调用。
  • +
  • 添加了 PluginService:GetPropertiesPad() AS PropertiesPad 方法,用于检索属性工具窗口。
  • +
  • 添加了对处理(通过 PluginService:GetSelectedProjectItem())项目工具窗口中更多项目类型的支持: 引用组、引用、资源文件等
  • +
  • 修复了操作隐藏编辑器文件时出现的问题(崩溃)
  • 文档 Bug修复 - +
  • 修复了 CONSTRUCTOR、DESTRUCTOR、ENUM、EVENT、FUNCTION、METHOD OPERATOR、PROPERTY、STRUCTURE 主题的文档问题 (#1655)
  • Changes in 2.22.0.1 @@ -146,35 +165,35 @@
    XIDE 常规 - +
  • 推出 “每日小贴士 ”功能
  • 项目窗口搜索器提示的显示时间从 2 秒增加到 5 秒
  • 在项目窗口中添加了使用 F3 重复上次搜索的功能
  • 为 Locals 详细信息编辑框添加了垂直滚动条
  • Editor - +
  • 修正了识别某些位置关键字(如 CONSTRUCTOR)的问题
  • 修正了 X# 特定数据类型(USUAL、FLOAT、DATE 等)的 intellisense 问题
  • 修正了从 X# 程序集读取名称中包含特殊字符的函数时的 intellisense 问题
  • 设计器 - +
  • 修复了在表单设计器中解锁控件的问题
  • 调试器 - +
  • 插件系统 - +
  • 已添加 ProjectItemBase:SelectNodeInProjectPad() 方法(适用于所有项目项类型)
  • 添加了属性 Editor:LineHeight、Editor:LineCount 和 Editor:FirstVisibleLine
  • 添加了方法 PluginService:GetEditorColor(eColor AS EditorColor) 和 PluginService:SetEditorColor(eColor AS EditorColor, oColor AS Color)
  • 文档 Bug 修复 - +
  • [查看源代码] 链接指向的是 Github 上的功能分支。现在指向的是主分支。
  • 更新了关于插值字符串的帮助主题。
  • @@ -264,7 +283,7 @@ 此外,如果项目文件中没有与编译器选项相匹配的特定属性,MsBuild 系统也不会将命令行参数传递给编译器。因此,如果项目文件不包含 <AllowDot> 节点,那么在使用 Core 语言编译项目时,命令行选项 /allowdot 将被启用,但在使用 VO 或 Xbase++ 语言编译项目时,命令行选项 /allowdot 将被禁用。这非常令人困惑! 为了解决这个问题,我们采取了以下措施 - +
  • 编译器将删除默认值。
  • 对于项目文件中未定义的选项,编译系统将生成带有“-”标志的命令行选项。这只会发生在 X# 特定的命令行选项上。我们从 Roslyn “继承”的编译器选项,如/debug、/optimize 等,仍将像以前一样工作。
  • 在 Visual Studio 中打开项目文件时,我们会检查上面列出的方言和选项。如果项目文件中缺少某个选项,我们就会添加该选项,并将其值设为 “true”。我们还将删除与方言无关的选项。例如:对于 Core 方言,foxpro 和 xpp 的特定设置将被移除。
  • @@ -276,7 +295,7 @@ 此外,还有一个 /fox1 编译器选项,可使 DEFINE CLASS 命令中的 AS ParentClass 子句成为可选项。没有 AS ParentClass 的类将自动从自定义类继承。 我们做了以下更改: - +
  • AS BaseType 子句将像在 Visual FoxPro 中一样是强制性的
  • ParentType 必须是自定义或从自定义派生的类。
  • /fox1 编译器现已过时
  • @@ -286,7 +305,7 @@ 编译器 Bug 修复 - +
  • 修正了字段/内存变量重复声明时的内部编译器错误 (#1475)
  • 修正了在启用 /fox2 的 VFP 方言中调用函数时的错误警告 (#1476)
  • 修正了 FLOAT 类型的最小/最大 IEnumerable 扩展方法的问题 (#1482)
  • @@ -303,17 +322,17 @@
  • 修正了与定义索引属性有关的一些问题 (#1543)
  • 修正了 /vo9(处理丢失的 RETURN 语句和返回值)编译器选项的若干问题 (#1544)
  • - +
  • Fixed parser problem with END DEFINE, END PROCEDURE and END FUNCTION in the VFP dialect (#1564)
  • - +
  • 修正了在 FoxPro 方言的 CLASS 语句中使用特性(attributes)的问题 (#1566)
  • - +
  • 修正了宏编译器在编译强类型代码块时出现的问题 (#1591)
  • 修正了在 VFP 方言中使用 DEFINE CLASS 语法定义的特性(Attributes)被忽略的问题 (#1612)
  • - +
  • 编译器在构建带有 .editorconfig 文件的解决方案时可能会崩溃。
  • 修正了为 FoxPro 风格类定义内的成员属性生成特性(attributes)输出的问题。
  • 修正了关于在 VFP 方言中定义不含 AS 子句的类的错误信息中的错字(#1611)
  • @@ -321,21 +340,21 @@
  • 更改与 FoxPro 兼容的 DEFINE CLASS(见上文)
  • 更改了处理命令行参数缺失的方式(见上文)
  • - +
  • We have added the double colon (::) separator for interpolated strings to separate the expression from the format specifier. C# uses the single colon (:) but that character is also used as member access operator in X#.See the String Literals topic for more information.
  • 生成系统 - +
  • 我们修正了编译系统中的一个问题,该问题有时会导致重新编译,即使没有更改任何内容。
  • - +
  • 修正了 machine.config 中的语言与内置系统中的语言定义不匹配的问题
  • 修正了导致 .xml doc 文件写入错误文件夹的问题
  • 更改了将丢失的项目文件属性转换为命令行参数的方式(见上文)
  • 运行时 Bug 修复 - +
  • 修正了一些 DBSetFilter() 与 VO 不兼容的问题 (#1489)
  • 修正了 DBSetFilter() 在没有匹配记录时导致后续调用 DBSetFilter() 或 DBClearFilter() 失败的问题 (#1493)
  • 修正了 FoxPro COPY 命令中 WITH CDX 子句的问题(缺少实现) (#1497)
  • @@ -345,60 +364,60 @@
  • 修正了在 FoxPro 方言中使用 Str() 时的宏编译器问题(导致 INDEX ON 命令出现问题)(#1535)
  • 修正了宏编译器在使用某些语言关键字(如 REF、FIELD、DEFAULT)作为标识符时出现的问题 (#1557)
  • - +
  • 修复了 VFP 方言中 REPLACE、DELETE 和 UPDATE 命令的问题 (#1574, #1575, #1576, #1577)
  • - +
  • 修正了 USUAL 类型中的一个问题,即浮点数值的 CompareTo 执行不正确 (#1616)
  • 修正了 USUAL 类型中 ! 运算符与 (LOGIC) cast 相比不能产生正确结果的问题。
  • - +
  • 我们修复了 XSharp.VFP.UI 库中的几个问题
  • RDD 系统 - +
  • 修正了 DbZap() 与 DBFNTX 之间的一个问题 (#1509)
  • - +
  • 修正了 DBFNTX 中 DBSetOrder(0) 始终返回 FALSE 的问题 (#1520)
  • - +
  • 为与 VO 兼容,当工作区处于 EOF 时使用 FieldPut() 时,消除了运行时错误 (#1542)
  • 修复了 AXDBFCDX 驱动程序中 OrderDescend() 的问题 (#1608)
  • - +
  • 修正了读取使用多字节编码存储的 DBF 文件的可变长度字段的问题。
  • - +
  • 修正了用简体中文编码的 DBF 文件被解释为粤语的问题。
  • 修复了 DBF RDD 中的一个问题,即在获取记录或文件锁后,未重新加载 currentbuffer。
  • 我们修复了 DBF 文件大于 2 Gb(0x7FFFFFFF 字节)时的一个问题
  • 在 DBFCDX 驱动程序中创建 UNIQUE 索引时会排除 DBF 文件中的第一条记录
  • VOSDK - +
  • 修正了 Window:__CommandFromEvent 中的拼写错误,该错误会导致来自 SEUIXP 的命令产生运行时错误。
  • Visual Studio 集成 Bug 修复 - +
  • 修复了保存/读取 OldStyleAssignment 编译器选项项目设置的问题 (#1495, #1582)
  • 修正了 VS2022 中的一个问题,即由于 VS 中的一个更改,编辑器中的几个功能不再工作 (#1545)
  • 修正了编辑器中 SCAN...END SCAN 的缩进问题 (#1549)
  • 修正了将 Windows 窗体用户控件的 .resx 文件放在解决方案资源管理器中不正确位置的问题 (#1560)
  • 修复了编辑器中代码片段在 VS 2022 17.11 版中不再工作的问题 (#1564)
  • - +
  • Fixed problem with the parameter list auto-showing tooltip when using <Enter> to accept a method from the member completion list (#1570)
  • - +
  • 修复了带有结束关键字(如 NEXT 和 ENDDO)的缩进行的问题(当这些关键字后跟有 “垃圾 ”时)。
  • 当 include 中的一个文件声明了实体(如 USING SomeNameSpace)时,在 VS 表单设计器中打开表单可能会失败(#1595,#1596)
  • 修正了调试器中以“$”字符开头的标识符(如异常对话框中的“$exception”)无法正确评估的问题(#1602)
  • 修正了使用 DEFINE CLASS  ... ENDDEFINE 声明的 VFP 样式的类的缩进问题(#1609)
  • 新特性 - +
  • 现在,在 VS 中构建任何项目类型时,TargetFramework 属性都会自动添加到程序集中 (#1507)
  • 已添加对 GotoBrace 命令的支持,该命令不仅适用于普通括号,还适用于 IF ... ENDIF 等关键字对  (#1522)
  • 现在,编辑器左上方有一个组合框,显示定义文件的项目。
  • @@ -421,7 +440,7 @@
    XIDE 常规 - +
  • 在 intellisense 中用 Mono.Cecil 代替 System.Reflection,以提高性能和稳定性
  • 工具箱编辑器现在还使用 Mono.Cecil 从 dlls 中读取控件
  • 现在,在打开文件后直接关闭文件时(没有激活另一个文件),焦点会在打开新文件前返回到之前激活的文件。
  • @@ -449,7 +468,7 @@
    编辑器 - +
  • 改进对代码中关键字的识别
  • 修复了代码中 2 个字母长函数的识别问题
  • 修正了 core 方言应用程序中定义的函数的 intellisense 问题
  • @@ -465,14 +484,14 @@
  • 已添加对 ?: 操作符的 intellisense 支持
  • 已添加对 IF <identifier> IS <type> VAR <local> 的 intellisense 支持
  • - +
  • 已添加选项(Preferences/Editor/Edit) ,以自动调整包含下划线的数字字面量
  • 添加了带 REPEAT...UNTIL 和 BEGIN SCOPE...END 选项的上下文菜单 Surround
  • 添加了在编辑器中排序实体的选项(试验性)(Edit->Sort Entities)
  • 设计器 - +
  • 现在,VOWED 属性窗口中的项目按名称排序
  • 现在可通过键盘上的 SHIFT+ 箭头键调整 WED 中控件的大小
  • 在设计器中加载 WindowsForms 表单时,所有 TabControl 现在都会初始选择其第一个 TabPage
  • @@ -483,18 +502,18 @@
  • 控件的锁定状态现在可在 Windows.Forms 设计器中保留(需要保存表单才能应用)
  • 修正了将 strip items 的 Text 属性设置为空的问题
  • - +
  • 在 VOWED 控制顺序对话框中添加了选项,以便在 “使用鼠标 ”时,在当前选定控件之后开始调整控件的控制顺序。
  • 在 Windows.Forms 工具箱中添加了组件 SaveFileDialog、OpenFileDialog 和 FolderBrowserDialog
  • 调试器 - +
  • 调试时的异常对话框现在可正确显示异常信息
  • 修正了在排除已处理的异常时不正确中断的问题
  • 修复了调试器中可能发生的常见崩溃问题
  • 插件系统 - +
  • 插件系统的一些小修正(您可能需要重新编译插件)
  • 已添加 Plugin:OnAfterCompileApplication(oApp AS Application, eResult AS CompileResult) 回调方法
  • 添加了 Editor:SetSelection() 方法,用于在编辑器中选择文本
  • @@ -502,22 +521,22 @@
    文档 Bug 修复 - +
  • 文档多处的更正 (#1504, #1506, #1514)
  • 新特性 - +
  • 中文文档的多处更新
  • 添加了丢失的 SCAN...ENDSCAN 文档 (#1548)
  • 为 DBOrderInfo() 函数主题添加了缺失的可用常量 (#1565)
  • - +
  • 修正了文档中有关 -memvar 选项的错误文本 (#1621)
  • Changes in 2.20.0.3 编译器 Bug 修复 - +
  • 修复了在 FoxPro 方言中 USE 命令 的 AGAIN 子句问题 (#235)
  • 修复了启用 -namedargs 编译器选项的情况下在编译时调用带有命名参数的类型数组(typed array)构造函数的问题 (#1430)
  • 修复了 INSTANCE 关键字与类内部使用的不一致 (#1432)
  • @@ -531,23 +550,23 @@
  • 修复了使用 USE 命令 时以方括号为包含文件名的字符定界符时产生的问题 (#1468)
  • 新特性 - +
  • 现在,您可以使用 NULL() 和 DEFAULT() 表达式以默认值初始化任何变量。这相当于 C# 中的 DEFAULT 关键字。
  • 我们添加了一个新的编译器选项 -modernsyntax (#1394)。这将禁用某些传统功能:
  • - +
  • && 作为行注释
  • * 在行首表示注释
  • 使用方括号的字符串
  • 括号表达式列表(因此更容易识别元组)
  • - +
  • 已添加对 IS NULL 和 IS NOT NULL 模式的支持 (#1422)
  • 在 Harbour 方言中添加了对文件宽 FIELD 语句(file wide FIELD statements)的支持 (#1436)
  • 运行时 Bug 修复 - +
  • 修复了在 Transform() 函数中使用 PTR 参数时的运行时错误 (#1428)
  • 修复了传递 PSZ 参数时,多个 String 运行时函数抛出运行时错误的问题 (#1429)
  • 修复了在 ADS RDD 中使用 OrdKeyVal() 和 ADS/ADT 文件时的问题 (#1434)
  • @@ -558,17 +577,17 @@
  • 修复了从 OEM dbfs 读取字段时的问题 (#1449)
  • 新特性 - +
  • 实现了 DBFMEMO 驱动程序(#604)
  • 实现了 DBFBLOB 驱动程序(#605)
  • 添加了缺失的无参数 SetColor() 函数重载(#1440)
  • - +
  • 此版本包含了新的 XSharp.VFP.UI.DLL ,该 DLL 由从 Visual FoxPro 导出的表单使用,通过 VFP Exporter 实现。
  • Visual Studio 集成 Bug 修复 - +
  • 修复了 VS 2019 中“跳转到文件”命令的问题 (#1146)
  • 修复了局部函数的“转到定义”功能不工作的问题 (#1415)
  • 修复了在某些情况下类导航框显示错误当前条目的问题 (#1426)
  • @@ -581,24 +600,24 @@
  • 修复了编辑器内的实体解析器在未启用 /memvars 编译选项时,遇到行首的 param 标记时会出错的问题。
  • 新特性 - +
  • 我们已经在帮助菜单中为中文版本的文档添加了一个菜单项。
  • VOXporter Bug 修复 - +
  • 修正了将属性转换为字符串字面量不正确的问题 (#1404)
  • 新特性 - +
  • 现在可以在任何模块的 VO 代码中定义特殊的 TEXTBLOCK 实体,名称为 “VXP-TOP” 或 “{VOXP:TOP}”,VOXporter 将自动在模块导出的 X# .prg 文件开头插入文本块的内容。这对指定 #using 语句(#1425)等顶级命令特别有用。
  • VFPXporter - +
  • 该版本的 X# 包含 VFP Exporter 。该工具可将 Visual FoxPro 项目文件转换为 Visual Studio 解决方案
  • XIDE - +
  • 当尝试在错误的 XIDE 版本中调试 32/64bit 应用程序时,添加了自动打开替代版本的选项。
  • 修正了编辑器中几个位置关键字的着色问题
  • 改进了编辑器对 TEXT...END TEXT 的支持
  • @@ -611,18 +630,18 @@
    文档 Bug 修复 - +
  • 修复了 /namedargs 编译器选项主题中的拼写错误。
  • 新特性 - +
  • 我们添加了几个关于修饰符(modifiers) 的章节
  • 我们添加了(部分)翻译成简体中文的帮助文件。
  • Changes in 2.19.0.2 编译器 Bug 修复 - +
  • 现在编译器在类型中定义重复字段名时会正确报告错误 (#1385)。
  • 修复了在泛型类型中定义多个类型约束的问题 (#1389)。
  • 修复了全局内存变量隐藏同名局部变量或参数的问题 (#1294)。
  • @@ -632,33 +651,33 @@
  • 修复了预处理器中扩展匹配符号无法正确匹配以字符串字面量开头的表达式的问题。
  • 新特性 - +
  • 我们增加了对维度(FoxPro)类属性的支持,例如:

    DIMENSION this.Field(10)
  • 我们添加了对 FOREACH AWAIT 的支持,如以下示例(适用于 .Net Core、.Net 5 及更高版本)。

  • FOREACH AWAIT VAR data IN GenerateNumbersAsync(number)
         SELF:oListView1:Items:Add(data)
      NEXT
    - +
  • 我们已经添加了对合并成员访问的支持,例如在以下示例中,FirstName 和 LastName 都是 oPerson 对象的属性::
  • ? oPerson:(FirstName+" "+LastName)   - +
  • WITH 命令现在也能识别 AS DataType 子句。
  • - +
  • XBase++ 类声明现在也允许使用 “END CLASS” 作为结束标记。
  • - +
  • 现在,编译器在尝试将 Lambda 表达式转换为常规表达式时会报错 (#1343)
  • - +
  • 我们增加了对元组(TUPLE)数据类型的支持。这包括声明局部变量、参数、返回值等。
  • 我们还支持将元组返回值分解为多个局部变量。更多信息,请参见元组帮助主题。.
  • 运行时 Bug 修复 - +
  • 修复了从宏编译器调用 DoEvents() 的问题 (#872)
  • 修复了 __Mem2StringRaw()(文档未记录)函数的问题 (#1302)
  • 修复了在头部中包含不正确排序信息的 DBFCDX 索引文件打开问题 (#1360)
  • @@ -672,22 +691,22 @@
  • 在使用 IDynamicProperties(FoxPro 方言)时,修复了 NoIVarget 的问题 (#1401)
  • 修复了 Hex2C() 使用小写字母时与使用大写字母时产生不同结果的问题。
    请注意,这个 bug 也存在于 VO 中,所以现在在 X# 中使用小写十六进制字母的 Hex2C() 的行为与 VO 不同 (#1402)
  • - +
  • 访问已使用 Advantage RDD 打开的已关闭 DbServer 对象上的属性可能会在调试器中引起问题。现在,当服务器关闭时,DbServer 类将返回空值。
  • 新特性 - +
  • 实现了 CREATE CURSOR 命令 [FoxPro] (#247)。还实现了 CREATE TABLE 和 ALTER TABLE(FoxPro 方言)
  • 实现了 INSERT INTO 命令(FoxPro 方言,用于从值、数组、对象和内存变量中插入变量)。SQL 查询中的 INSERT INTO 尚不能使用 (FoxPro 方言)
  • - +
  • 在 XSharp.VFP 中实现了 Str() 函数的新 FoxPro 兼容版本 (#386)
  • 现在,当打开索引文件失败时会抛出错误 (#1358)
  • 添加了 AscA() 函数,并使 Asc() 依赖于运行时中的 SetAnsi() 设置 (#1376)
  • 头文件 Bug 修复 - +
  • 实现了几个缺失的命令 (#1407)
  • 修复了 SET DECIMALS TO 命令中的拼写错误 (#1406)
  • 为 GATHER 命令(FoxPro)添加了缺失的 NAME 和 MEMVAR 子句 (#1409)
  • @@ -696,7 +715,7 @@
    Visual Studio 集成 Bug 修复 - +
  • 修复了通过静态使用引用的类型中查找公共静态字段的问题 (#1307)
  • 修复了在块语句内定义的局部变量的 intellisense 问题 (#1345)
  • 修复了 intellisense 不正确地将代码中指定的类型解析为 usings 列表中的另一个类型的问题 (#1363)
  • @@ -705,7 +724,7 @@
  • 修复了在某些情况下类导航栏未显示方法名称的问题 (#1381)
  • 新特性 - +
  • 增加了对 IEnumerable 和 DataTable 调试可视化器的支持 (#1373)。
    请注意,当浏览 X# 数组时,可视化器中的结果看起来非常丑陋,因为可视化器忽略了隐藏属性和字段的属性,以用于我们的 USUAL 类。
  • 调整了 Globals、Workareas 等调试器窗口,以遵循在 VS 中选择的全局主题 (#1375)。还向 Workarea 窗口添加了状态面板,这样您可以查看工作区状态或字段名称/值。
  • 为使用 USING VAR 或 USING (LOCAL) IMPLIED 声明的局部变量添加了 intellisense 支持 (#1390)。
  • @@ -713,23 +732,23 @@
    VOXporter 修复 - +
  • 修正了 VOXporter 用 {VOXP:UNC} 标记错误修改先前已注释代码的问题 (#1404)
  • 文档 Bug 修复 - +
  • 运行时帮助中函数的文档描述有误。
    例如,“Left” 函数的主题标题原为 “Functions.Left Method”,现已更改为 “Left Function”。
  • 文档中的 “SingleLineEdit” 类被称为 “Real4LineEdit”,已进行修正。
  • 新特性 - +
  • 我们在 X# 编程指南中添加了有关多个主题的附加文档。
  • Changes in 2.18.0.4 编译器 Bug 修复 - +
  • 修正了一些与 XBase++ 相关命令的预处理器问题 (#1213, #1288, #1337)
  • 修正了隐式访问静态类成员的问题(XBase++ 方言) (#1215)
  • 修正了 DIMENSION 命令(VFP 方言)的解析器错误 (#1267)
  • @@ -747,7 +766,7 @@
  • 修正了同名 .prg 文件中的静态定义问题 (#1361)
  • 新特性 - +
  • 引入了未为 OUT 参数指定 OUT 关键字的警告 (#1295)
  • 更新了不带参数的方法和构造函数调用的解析器规则。这可能会加快编译速度。
  • 编译器不再 “内联” SLen()。如果您在应用程序中引用 XSharp.Core,SLen() 现在会被解析为 X# Core 中的 SLen() 函数。
    如果编译时没有使用 X# 运行时,或者编译时使用的是 Vulcan 运行时,那么现在就需要在代码中添加 SLen() 函数。
    这是 X# Core 中的代码,您可以将其用作模板
    FUNCTION SLen(cString AS STRING) AS DWORD
      LOCAL len := 0 AS DWORD
      IF cString != NULL
         len := (DWORD) cString:Length
      ENDIF
      RETURN len
  • @@ -755,7 +774,7 @@
  • 某些 Xbase++ 特定功能的代码生成发生了变化。
  • 我们使用 IN <ursor> 子句增加了几个 UDC
  • - +
  • 我们为 FoxPro CAST 表达式添加了 UDC 支持
  • 更多 SET 命令现在也支持 & 运算符
  • 编译器现在在更多位置支持“Late bound names(后期绑定名称)”,例如在 REPLACE 命令、With 命令等中。现在可以编译而无问题。
  • @@ -763,7 +782,7 @@ cVar := "FirstName"
    WITH oCustomer
      .&cVar := "John"
    END WITH
    and this too

    cVar := "FirstName"
    REPLACE &cVar with "John"
    运行时 Bug 修复 - +
  • 修正了在清除关系之前错误关闭 dbf 文件的问题 (#1237)
  • 修复了文件创建后索引范围可见性不正确的问题 (#1238)
  • 修正了 FFirst()/FNext() 无法找到过滤器指定的所有文件的问题 (#1315)
  • @@ -777,7 +796,7 @@
  • 当当前目录为 UNCPath 时,修正了 CurDir() 函数中的一个问题(\\Server\Share\SomeDir) (#1378)
  • 新特性 - +
  • 已添加对在 USUAL 类型中访问索引器的支持 (#1296)
  • 我们添加了一个 DbCurrency 类型,当读取货币型字段时,它会从 RDD 返回。
  • 实现了 TEXT TO FILE 命令 (#1304)
  • @@ -791,7 +810,7 @@
  • 当服务器关闭时,一些 DbServer 属性不再调用 RDD,而是返回空白值。
  • 类型化 SDK 类 - +
  • 添加了不带参数的 DbServer:Append() 重载 (#1320)
  • 添加了丢失的 DataServer:LockcurrentRecord() 方法(#1321)
  • 修复了以 ShellWindow 为所有者创建 DataWindow 时的运行时错误 (#1324)
  • @@ -804,7 +823,7 @@
    Visual Studio 集成 Bug 修复 - +
  • 修正了项目文件中 “allow dot(允许点)” 设置的问题(#1192)
  • $CALLSTACK 等几个宏无法以预期格式返回值。这一问题已得到修复 (#1236)
  • 修正了当 form.prg 第一行中存在块注释时的生成问题 (#1334)
  • @@ -814,7 +833,7 @@
  • 新调试器窗口没有遵循当前窗口主题。现在已部分修复 (#1375)
  • VO 键入编辑器 - +
  • 修正了在 VOWED 中使用特定字体的 CheckBox 和 RadioButton 标题在设计时的显示问题 (#796)
  • 修正了 VOWED 编辑器将 prg 中的所有现有类更改为分部类的问题 (#814)
  • 修正了在 VOWED 中错误添加构造函数代码以实例化 DataBrowser 的问题,即使没有(未删除的)数据列也是如此 (#1365)
  • @@ -822,7 +841,7 @@
    VOXporter 新特性 - +
  • 引入选项(在现有代码中内嵌),用于注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • - {VOXP:COM} // comment out line @@ -830,13 +849,13 @@ - {VOXP:DEL} and // {VOXP:REM} // remove line 安装 新特性 - +
  • 安装程序现在会检测是否安装了所需的 Visual Studio 组件 “Core Editor ”和“.Net Desktop Development”。
    如果发现一个或多个 VS 安装,但其中没有一个安装同时具备所需的组件,则会显示警告。
  • Changes in 2.17.0.3 编译器 Bug 修复 - +
  • 修正了与 XBase++ 在使用类成员方面的不兼容问题 (#1215) UNCONFIRMED
  • 修正了/vo3 选项在 XBase++ 方言中无法正常工作的问题。还添加了对修饰符 final、introduce 和 override 的支持 (#1244)
  • 修正了在类字段上使用 NEW 修饰符的问题 (#1246)
  • @@ -852,14 +871,14 @@
  • 修正了一个问题,即当接口在编译时为 “未知” 和/或属性名不是 “Item ”时,带有明确接口前缀的属性定义可能导致编译器崩溃 (#1306)
  • 新特性 - +
  • 已添加对 “经典” INIT PROCEDURE 和 EXIT PROCEDURE 的支持 (#1290)
  • 当 case 块、if 块和其他块内的语句列表为空时,已添加警告。要抑制该警告,可在代码中添加 NOP 语句。
  • 我们对编译器中的词法和解析器进行了一些修改。这可能会减少内存占用量,并加快代码的编译速度。
  • 运行时 Bug 修复 - +
  • 修正了 CToD() 中的几个问题(与 VO 不兼容) (#1275)
  • 已添加对 AAdd() 中第 3 个参数的支持,以指定在何处插入新元素 (#1287)
  • Default() 函数现在不再更新值为 NULL_OBJECT 的 usuals,以便与 Visual Objects 兼容 (#1119)。
  • @@ -867,16 +886,16 @@
    Visual Studio 集成 新特性 - +
  • 我们为以下项目添加了调试器面板窗口:
  • - +
  • Global variables
  • Dynamic memory variables (Privates and Publics)
  • Workareas
  • Settings
  • - +
  • 您可以在调试过程中通过 Debug/XSharp 菜单打开这些窗口。还有一个特殊的 “X# 调试器工具栏”,也只在调试期间显示。
  • 这些窗口只有在调试的应用程序使用 X# 运行时才会显示信息(因此无法与 Vulcan 运行时结合使用)。
    如果您正在调试使用 X# 运行时的其他语言编写的应用程序,那么这些窗口也会显示相关信息。
    我们计划在今后的版本中为这些窗口添加更多功能,例如当前选定区域的属性和当前选定工作区中的字段/值。
  • 我们为 X# 文件添加了对 “FileCodeModel ”的支持。WPF 设计器和 XAML 编辑器都会使用此功能。
    现在还修复了 XAML 编辑器中的“转到定义”  (#1026)
  • @@ -884,7 +903,7 @@
  • 我们为用户自定义命令添加了 “转到定义” 支持。例如,在 USE 命令的 USE 关键字上选择 “转到定义”,就会跳转到标准头文件中的定义。
  • Bug 修复 - +
  • 修正了 Type[,] 数组的成员完成问题 (#980)
  • 修正了当同名类不存在命名空间时命名空间内类的成员补全缺失 (#1204)
  • 修正了当实体在预处理行中有属性时自动缩进的问题 (#1210)
  • @@ -911,20 +930,20 @@
  • 修复了在调试过程中打开文件时可能发生的 VS 锁定问题。
  • 带有静态构造函数和普通构造函数的类的参数提示未得到正确处理。这一问题已得到修复。
  • - +
  • 在打开项目时,如果缺少从属项(如 .resx 文件或 .designer.prg 文件)与其父项之间的从属关系,则可能出现异常,导致项目无法打开。这一问题已得到修复。
  • 当同一行出现两个编译器错误且错误代码相同时,有时会在 VS 输出窗口中显示,但不在错误列表中显示。这一问题已得到修复 (#1308)
  • VOXporter 新特性 - +
  • 已添加对特殊标记 {VOXP:COM}、{VOXP:UNC} 和 {VOXP:DEL} 的支持。/ {VOXP:REM},以注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • Changes in 2.16.0.5 编译器 Xbase++ 方言的新特性 我们对 Xbase++ 类定义的生成方式进行了多项修改。请使用新版本并检查您的代码! - +
  • 现在我们为所有类生成一个类函数。它返回的对象与 Xbase++ 类的 ClassObject() 方法相同。
    无论使用 /xpp1 编译器选项与否,都会生成该类函数。
    Class 函数依赖于函数 __GetXppClassObject 和 XSharp.XPP.StaticClassObject 类,这两个函数都可以在 XSharp.XPP 程序集 (#1235) 中找到。
    通过类函数,您可以访问类变量和类方法。
  • 在 Xbase++ 中,您可以使用相同名称的字段(VAR)和属性(ACCESS / ASSIGN METHOD),甚至具有相同的可见性。而以前是不支持的。
    现在,编译器会自动将字段设为 protected(或 FINAL 类的 private),并使用 [IsInstance] 属性对其进行标记。
    在类的代码中,编译器会将名称解析为字段。在类外的代码中,编译器将把名称解析为属性。
  • 对于派生类,编译器现在会自动生成一个带有父类名称的属性,该属性被声明为父类,并返回等同于 SUPER 的属性。
  • @@ -936,12 +955,12 @@
    其他方言的新特性 - +
  • 在 Visual Objects 中,您可以使用 INSTANCE 关键字声明字段,并添加与 INSTANCE 字段同名的 ACCESS/ASSIGN 方法。
    在以前的 X# 版本中,不支持这一功能。
    现在,编译器可以正确处理这种情况,在类的方法/属性内的代码中将名称解析为字段,在类外的代码中将名称解析为属性。
  • 现在,PPO 文件包含用户定义命令和翻译的原始空白。
  • Bug 修复 - +
  • 修正了 VO 方言中的一些方法重载解析问题 (#1211)
  • 修正了大量 DO CASE 语句和大量 IF ELSEIF 语句的内部编译器错误(堆栈不足) (#1214)。
  • 修正了插值/扩展字符串语法的一个问题 (#1218)
  • @@ -966,15 +985,15 @@ 如果您正在使用我们的解析器解析源代码,请检查您的代码。我们对处理 if ... else 语句和 case 语句的语言定义做了一些修改(两条规则共享一条新的 condBlock 规则)。这消除了语言中的一些递归。此外,还修改了一些 Xbase++ 的特定规则。请查看 language definition online 运行时 新特性 - +
  • 添加了 DOY() 函数。
  • 添加缺失的 ADS_LONG 和 ADS_LONGLONG 定义.
  • - +
  • 提高了网络驱动器上 CDX 跳转操作的速度 (#1165)
  • Bug 修复 - +
  • 修正了 DbSetRelation() 和 RLock() 的一个问题 (#1226)
  • 调整了从 NULL_PSZ 到字符串的隐式转换,现在返回 NULL 而不是空字符串。
  • 部分初始化代码已从 _INIT 程序移至 SQLConnection 类的静态构造函数,以便更方便地在非 X# 应用程序中使用该类。
  • @@ -986,18 +1005,18 @@
  • 修正了 MemRealloc 中的一个问题,即对同一指针的第二次调用将返回 NULL_PTR (#1248)
  • VOSDK - +
  • SDK 类中的全局数组现在由 SQLConnection 类的构造函数初始化,以解决主应用程序不包含 SQL 类程序集链接时出现的问题。
  • Visual Studio 集成 调试 - +
  • 调试器表达式计算器现在也能求值后期绑定的属性和字段(如果在项目中启用了编译器选项)。
    如果这会产生负面影响,可以在 “工具/选项 调试/X# Debugger” 中禁用。
  • 现在,调试器表达式计算器将使用主程序(如果该程序是 X# 项目)中的编译器选项进行初始化。
    调试器选项对话框 上的设置现在仅在调试由非 X# 启动项目加载的 DLL 时使用。
  • 对于实例字段、属性和方法,调试器表达式计算器现在总是接受 “.” 字符,与项目选项中的设置无关。
    之所以需要这样做,是因为在向观察窗口添加表达式或更改属性或字段值时,VS 调试器中的几个窗口会自动插入 “.” 字符。
  • 新特性 - +
  • 已添加对在 DbServer 编辑器中导入索引的支持。
  • X# 项目系统现在可以记住在设计模式下 Windows 编辑器中打开的窗口,并在重新打开解决方案时正确地重新打开它们。
  • 我们为 Harbour 控制台应用程序和 Harbour 类库添加了模板。
  • @@ -1007,7 +1026,7 @@
  • 我们更新了部分项目模板。
  • Bug 修复 - +
  • 修正了编辑器中 “:=” 运算符的成员列表显示不正确的问题 (#1061)
  • 修正了 VOMED 生成的菜单项 “定义” 名称与 VO 生成的名称不同的问题 (#1208)。
  • 修正了 VOWED 在某些情况下生成的代码行顺序不正确的问题 (#1217)。
  • @@ -1018,12 +1037,12 @@ Changes in 2.15.0.3 编译器 新特性 - +
  • 使用 STACKALLOC 语法在堆栈(而非堆)上分配内存块 (#1084)
  • 为 XBase++ 方法添加了 ASYNC 支持 (#1183)
  • Bug 修复 - +
  • /allowdot 被禁用时,在使用点访问实例成员时,修正了一些特定情况下编译器缺失的错误 (#1109)
  • 修正了通过引用传递参数的一些问题 (#1166)
  • 修正了插值字符串的一些问题 (#1184)
  • @@ -1041,14 +1060,14 @@
    运行时 Bug 修复 - +
  • 修正了 DBSort() 中的运行时错误 (#1196)
  • 修正了 ConvertFromCodePageToCodePage 函数中的错误
  • 更改 XSharp.RuntimeState 的启动代码可能导致代码页不正确
  • Visual Studio 集成 新特性 - +
  • 为 WED 添加了 VS 选项,以便使用乘法器手动调整生成资源中的 x/y 位置/大小 (#1199)
  • 新增选项页面,用于控制编辑器在 Complete Word (Ctrl+Space)命令中查找标识符的位置。
  • 对调试器表达式计算器进行了大量改进 (#1050)。请注意,该调试器表达式计算器仅适用于 Visual Studio 2019 及更高版本。
  • @@ -1060,7 +1079,7 @@
  • 在切换目标框架时,为 Application project options 页面添加了警告。
  • Bug 修复 - +
  • 当使用光标键在编辑器中移动到不同行时,修正了之前被破坏的自动同步大小写问题 (#722)
  • 修正了使用 Control+Space 完成代码时的一些问题 (#1044, #1140)
  • 修正了在某些情况下输入“:” 时的 intellisense 问题 (#1061)
  • @@ -1082,14 +1101,14 @@
    文档 更改 - +
  • 类型化 SDK 中的一些方法被记录为 Function。现在它们被正确地记录为 Method
  • 类的 “属性列表” 和 “方法列表” 现在包括对继承自父类的方法的引用。不包括从 .Net 类继承的方法,如从 System.Object 继承的 ToString()。
  • Changes in 2.14.0.2, 3 & 4 Visual Studio 集成 Bug 修复 - +
  • 修复了在 VS 2017 中打开 PRG 文件时 X# 编辑器出现的异常
  • 在有 XML 注释的条目后一行用回车键从完成列表中选择成员时,可能会在编辑器中插入额外的三斜线 (///) 字符。
  • 插入 XML 注释的三斜线命令无法正常工作。现已修复。
  • @@ -1107,19 +1126,19 @@ Changes in 2.14.0.1 编译器 Bug 修复 - +
  • 修正了一个日期字面量问题,该问题会导致一条关于未知别名 “gloal ”的信息 (#1178)
  • 修正了 AssemblyFileVersion 和 AssemblyInformationalVersion 中前导 0 字符丢失的问题。如果属性中没有通配符 “*”,则会保留这些前导零 (#1179)
  • 运行时 Bug 修复 - +
  • 2.14.0.0 的运行时 DLL 标记了 TargetFramework 属性。这造成了一些问题。运行时动态链接库不再设置该属性 (#1177)
  • Changes in 2.14.0.0 编译器 Bug 修复 - +
  • 修正了当类型和局部变量具有相同名称时解析方法的问题 (#922)
  • 改进了编译器隐式生成的方法(INIT、隐式构造函数)的 XML 文档消息 (#1128)
  • 修正了带有默认参数值的 DELEGATE 的内部编译器错误 (#1129)
  • @@ -1137,11 +1156,11 @@
    运行时 新特性 - +
  • 为 DbNotificationType 枚举添加了两个新值: BeforeRecordDeleted 和 BeforeRecordRecalled。还添加了 AfterRecordDeleted 和 AfterRecordRecalled,它们是已存在的 RecordDeleted 和 RecordRecalled 的别名 (#1174)
  • Bug 修复 - +
  • 已添加/更新 Win32API SDK 库中的若干定义 (#696)
  • 修正了 “SkipUnique” 无法正常工作的问题 (#1117)
  • 修正了当底部范围大于最高可用键值时的 RDD 范围问题 (#1121)
  • @@ -1157,7 +1176,7 @@
    Visual Studio 集成 新特性 - +
  • 现在使用 “引用管理器 ”而不是 “添加引用对话框 “ 来添加引用 (#21,#1005)
  • 在 “解决方案资源管理器” 上下文菜单中添加了一个选项,用于在 form.prg 和 form.designer.prg 中拆分 Windows 表单 (#33)
  • 我们在工具/选项 TextEditor/X# 设置中添加了一个选项页,允许您启用/禁用 X# 源代码编辑器中的某些功能,如 “高亮显示单词”、“括号匹配 ”等。备份 Windows 窗体编辑器源代码的选项已从文本编辑器选项页移至自定义编辑器选项页。在 “工具/选项 ”对话框中搜索 “备份” 即可找到该设置。
  • @@ -1165,7 +1184,7 @@
  • 我们已在所有选项页面上添加了 “搜索关键字”。
  • Bug 修复 - +
  • 修正了当解决方案处于团队基础服务器 SCC 下时重命名文件的问题 (#49)
  • WinForms 设计器现在可忽略 form.prg 和 designer.prg 文件中指定的名称空间的差异(使用 form.prg 中的名称空间) (#464)
  • 修正了某些情况下类的鼠标下工具提示不正确的问题 (#871)
  • @@ -1196,29 +1215,29 @@ Changes in 2.13.2.2 编译器 Bug 修复 - +
  • 仅使用 INSTANCE 修饰符声明的类成员被生成为 public。现在已改为 protected,就像在 Visual Objects 中一样 (#1115)
  • 运行时 Bug 修复 - +
  • IVarGetInfo() 返回的 PROTECTED 和 INSTANCE 成员值不正确。此问题已得到修复。(#1116)
  • Default() 函数将以 NULL_OBJECT 初始化的 usual 变量更改为新值。这与 Visual Objects 不兼容 (#1119)
  • Visual Studio 集成 新特性 - +
  • Rebuild Intellisense Database 菜单选项现在会在重启 Visual Studio 之前要求确认 (#1120)
  • 现在可以隐藏解决方案资源管理器中的 “Include Files” 节点(工具/选项 X# Custom Editors/Other Editors)
  • Bug 修复 - +
  • CATCH 子句中声明的变量的类型信息不可用。该问题已得到修复 (#1118)
  • 修复了参数提示的几个问题 (#1098、#1065)
  • 修复了当光标位于 “global” 实体(如非常大的大型项目中的函数或过程)中的未声明标识符上时的性能问题
  • 当 #include 语句的源代码包含相对路径时,“Include Files” 节点可能包含重复引用,例如
    #include "..\GlobalDefines.vh"
  • - +
  • 在打开解决方案时,禁止在解决方案资源管理器中展开 “Include Files” 节点。
  • 单字词(如 i、j、k)没有通过 “高亮显示单词 ”功能高亮显示
  • 在 quickinfo 工具提示中,“ptr ”类型没有用关键字颜色标出
  • @@ -1227,12 +1246,12 @@ Changes in 2.13.2.1 编译器 新特性 - +
  • 现在,解析器可以识别 PUBLIC 和 PRIVATE 内存变量声明中的 AS <type> 子句,但会忽略这些子句并发出警告
  • 我们为使用 LPARAMETERS 声明的局部变量添加了 AS <type> 支持。函数/过程仍采用 clipper 调用约定,但局部变量采用声明的类型。
  • Bug 修复 - +
  • 在未选择 /memvar 编译器选项的情况下,PUBLIC 和 PRIVATE 关键字有时会被误解为内存变量声明。我们添加了解析器规则以防止这种情况发生:当未选择 /memvar 时,PUBLIC 和 PRIVATE 仅用作可见性修饰符
  • 修复选择函数和方法重载时出现的问题 (#1096、#1101)
  • 2.13.2.0 版引入了一个问题,可能会导致超大源文件出现严重的性能问题。2.13.2.1 版已修复了这一问题。
  • @@ -1240,14 +1259,14 @@ 运行时 Bug 修复 - +
  • 当运行时无法解决对重载方法的后期绑定调用时,它会产生一条包含所有相关重载方法列表的错误信息 (#875#1096)
  • 为 FoxPro 方言添加的 .NULL. 相关行为破坏了涉及 usuals 的现有代码。在 FoxPro 方言中,DBNull.Value 现在被视为 .NULL.,但在其他方言中则被视为 NULL_OBJECT / NIL。
  • VFP 库中 PropertyContainer 类的几个内部成员现在是 Public 成员
  • Visual Studio 集成 Bug 修复 - +
  • 速览定义、转到定义等的查找代码过滤掉了实例方法,只返回静态方法。这一问题已得到修复 (#1111#1100)
  • 为修复键入时的缩进问题而做的几处修改 (#1094)
  • 修正了参数提示的几个问题 (#1098#1066#1110)
  • @@ -1258,11 +1277,11 @@ Changes in 2.13.1 编译器 新特性 - +
  • FoxPro 方言中的 PUBLIC 和 PRIVATE 语句现在支持内联赋值,例如
    PUBLIC MyVar := 42
    除了名称为 “FOXPRO” 和 “FOX” 的变量外,没有初始化的 PUBLIC 值将是 FALSE。在 FoxPro 方言中,这些变量的初始化值为 TRUE
  • Bug 修复 - +
  • 修正了在 foxpro 方言中初始化 File Wide 公共文件的问题
  • 对于复杂表达式,错误信息的列号不一定正确。这一问题已得到修复 (#1088)
  • 修正了词法器中的一个问题,即当源代码包含跨多行的语句时(通过使用分号作为续行符),行号不正确 (#1105)
  • @@ -1272,20 +1291,20 @@ 运行时 新特性 - +
  • 添加了在运行时解决方法调用或数组访问的功能 (#1108)
  • 为 XSharp.RT.Debugger 库中的工作区窗口(WorkareasWindow)添加了转到记录编号功能
  • Visual Studio 集成 新特性 - +
  • 现在,VS 项目树(在一个特殊节点中)显示项目使用的包含文件 (#906 )
    这包括项目本身的包含文件,也包括 XSharp 文件夹或 Vulcan 文件夹中的包含文件(如适用)。
  • 我们尽可能在项目树和其他几个位置使用 Visual Studio 的内置镜像。
  • 现在,我们在 VS 中的后台分析程序会在生成过程中暂停,以减少对生成的干扰。
  • 我们在缩进选项中添加了一个设置,这样您就可以控制类字段和属性的缩进,并将其与方法分开。
    因此,您可以选择缩进字段和属性,而不缩进方法。这一点也已添加到 .editorconfig 文件中
  • Bug 修复 - +
  • 修正了 “速览定义” 和 “转到定义” 的问题
  • 在查找函数时,我们有时会(意外地)将其他类中的静态方法也包括在内。
  • 在解析 QuickInfo 和速览定义的标记时,如果方法名称之后和开放括号之前有空格,则无法找到方法名称。
  • @@ -1297,18 +1316,18 @@ Changes in 2.13 编译器 新特性 - +
  • 我们新增了一个编译器选项 /allowoldstyleassignments,允许在赋值时使用 “=” 运算符而不是 “:=”。
    该选项在 VFP 方言中默认为启用,而在所有其他方言中默认为禁用。
  • - +
  • 我们修改了与数字转换有关的 /vo4 和 /vo11 命令行选项的行为。
    /vo4 之前,它只与整数之间的转换有关。现在,它已扩展到小数(如 float、real8、十进制和货币)和整数之间的转换。
    在原始语言(VO,FoxPro)中,您可以将带有整数值的分数赋给变量而不会出现问题。
    在.NET中,你不能这样做,但你必须在赋值时添加一个强制转换:
  • LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // 无转换:如果不进行转换,将无法在 .Net 中编译
    integerValue := (INT) floatValue    // 显式转换:可在 .Net 中编译
    ? integerValue

    如果启用了编译器选项 /vo4,那么不带强制转换的赋值也能正常工作。
    编译器选项 /vo4 增加了一个隐式转换
    在这两种情况下,编译器都会发出警告:
    warning XS9020: 将 “float ”缩小转换为 “int ”可能导致数据丢失或溢出错误
    上述整数 integerValue 的值由 /vo11 编译器选项控制:
    默认情况下,.Net 将小数值转换为整数值时,会四舍五入为零,因此值为 1。
    如果启用编译器选项 /vo11,小数将四舍五入为最接近的偶数整数值,因此示例中 integerValue 的值将是 2。
    这并不是什么新鲜事。
    我们在 2.13 版中进行了修改,以确保 X# 数字类型的这种差异不再在运行时确定,而是在编译时确定。
    在早期版本中,这个问题是由运行时中 FLOAT 和 CURRENCY 类型的转换运算符处理的。
    这些类根据主程序中的  /vo11 设置选择四舍五入方法,该设置存储在 RuntimeState 对象中。
    但是,当程序集使用  /vo11 编译,而主程序不使用 /vo11 编译时,可能会产生不必要的副作用。
    例如,ReportPro 或 bBrowser 就可能出现这种情况。
    如果这样一个程序库的作者现在选择使用  /vo11 进行编译,那么他可以肯定,他代码中的所有这些转换都将根据他的选择四舍五入为零或四舍五入为最接近的偶数整数。
    - +
  • 编译时代码块的 DebuggerDisplay 属性已更改。现在你可以在调试器中看到编译时代码锁定的源代码。
  • Bug 修复 - +
  • 修正了 ASYNC/AWAIT 的代码生成问题 (#1049)
  • 修正了 VFP 方言中 CODEBLOCK 的 Evaluate() 的内部编译器错误 (#1043)
  • 修正了一个内部编译器错误,即在 END FUNCTION 语句后错误插入 UDC
  • @@ -1335,7 +1354,7 @@ 运行时 Bug 修复 - +
  • 修正了 Mod() 函数中与 VO 的一些不兼容问题
  • 修正了当维度不匹配时,在 VFP 方言中复制到数组时出现的异常 (#993)
  • 修正了 SetDeleted(TRUE) 和 DESCEND 排序的寻道问题 (#986)
  • @@ -1349,7 +1368,7 @@
    新特性 - +
  • 增强 Unicode AnyCpu SQL 类 (#1006)
  • 已添加以只读模式打开 Sqlselect 的属性。这将防止 Append()、Delete() 和 FieldPut() 等操作。
  • 延迟创建 InsertCmd、DeleteCmd、UpdateCmd,直到真正需要时为止
  • @@ -1359,12 +1378,12 @@ FoxPro 方言 - +
  • 添加了 ADatabases() 函数
  • Visual Studio 集成 新特性 - +
  • 现在,您可以通过 工具/选项文本编辑器/X# 选项 页面控制缩排方式。我们添加了多个选项来控制源代码的缩进。如果你想在公司内部执行缩进规则,也可以通过 .editorconfig 文件设置这些选项。
  • 我们现已在源代码编辑器中添加了大量代码格式化选项。有关可用选项,请参见 工具/选项/文本编辑器/X#/缩进 (#430)
  • 我们实施了 “标识符大小写同步” 选项。其工作原理如下: 编辑器会拾取源文件中首次出现的标识符(类名、变量名等),并确保同一源文件中所有其他出现的标识符都使用相同的大小写。这不会在源文件中强制使用大小写(那样会太慢)
  • @@ -1374,7 +1393,7 @@
    Bug 修复 - +
  • 修正了 TFS 下解决方案的 “获取最新版本” 问题 (#1045)
  • 修正了 WinForm 设计器更改 main-prg 文件格式的问题 (#806)
  • 修正了 WinForms 设计器中代码生成的一些问题 (#1042, #1052)
  • @@ -1395,13 +1414,13 @@
  • 右键单击 packages.config 文件并选择 “迁移到 packagereferences ”选项不起作用,因为 Visual Studio 内部有一个硬编码的支持项目类型列表。我们现在要 “伪造” 项目类型,让 VS 满意并启用向导。
  • 生成系统 - +
  • 在 VS 中编译 X# 项目时,负责创建命令行的 XSharp.Build.Dll 无法正确地将 /noconfig 和 /shared 编译器选项传递给编译器。因此,即使启用了使用共享编译器的项目属性,也无法使用共享编译器。此外,编译器还会自动包含对 xsc.rsp 文件中列出的所有程序集的引用,该文件位于 XSharp\bin 文件夹中。
    您现在可能会遇到程序集因缺少类型而无法编译的情况。如果您使用的类型位于 xsc.rsp 中列出的程序集内,就会出现这种情况。您现在应该在 X# 项目中添加对这些程序集的明确引用。
  • Changes in 2.12.2.0 编译器 Bug 修复 - +
  • 修正了代码生成中的一个错误,以处理带括号索引的 FoxPro 数组访问 (#988, #991)
  • 编译器会对使用 IS 声明的 locals 生成错误的警告。现已修复。
  • 编译器未就 ACCESS/ASSIGN 上 OVERRIDE 修饰符的无效使用报告错误,现已修复 (#981)
  • @@ -1414,21 +1433,21 @@
  • 修正了向 CLIPPER 函数/方法传递单个 NULL 参数时 PCount() 的一个问题 (#1016)
  • 新特性 - +
  • 我们已在所有方言中添加了对 TEXT ... ENDTEXT 命令的支持。请注意,该命令有多种变体。其中一种变体适用于所有方言(TEXT TO varName)。其他变体取决于所选择的方言。我们已将对 TEXT ... ENDTEXT 的支持从编译器转移到预处理器。这意味着还有 2 个新的预处理器指令: #text 和 #endtext (#977, #1029)
  • 启用了新的编译器选项 /vo17,为 BEGIN SEQUENCE...RECOVER 命令实现了与 VO 更为兼容的行为 (#111、#881、#916):
  • - +
  • 对于包含 RECOVER USING 的代码,将检查是否存在封装异常。如果异常不是封装异常,运行时将调用一个函数(FUNCTION _SequenceError(e AS Exception) AS USUAL)来处理该错误。例如,它可以调用错误处理程序,或抛出错误
  • 如果没有 RECOVER USING 子句,编译器就会生成一个子句,并在生成的子句中检测 RECOVER 是在包裹异常还是正常异常的情况下完成的。对于包裹异常,编译器会获取值并在运行时调用一个特殊函数(FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID)。如果在调用生成的恢复时出现了 “正常 ”异常,则会调用上一小节中的 _SequenceError 函数。
  • - +
  • 我们新增了对 CCALL() 和 CCALLNATIVE() 的支持
  • #pragma 指令现在由预处理器处理。因此,您可以在代码的任何地方添加 #pragma 行:实体之间、实体内部等。
  • 运行时 Bug 修复 - +
  • 更改了 AdsGetFTSIndexInfo 的原型 (#966)
  • 修复了 TransForm 和十进制类型的一个问题 (#1001)
  • 在 VFP 程序集中添加了几种缺失的返回类型
  • @@ -1444,16 +1463,16 @@
  • Foreach 无法在包含从 IVarGet() 等后期绑定属性访问返回的集合的属性上正确工作(#1033)
  • 新特性 - +
  • 现在,您可以在运行时状态中注册一个委托,从而控制宏编译器如何缓存已加载程序集的类型 (#998)。
    该委托必须具备以下格式:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    例如:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // 不缓存 DevExpress 程序集
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • 兼容 VO SDK - +
  • 修正了 SetAnsi(FALSE) 导致带图片的单行编辑控件在输入缩略语时显示随机字符的问题 (#1038)
  • Typed VO SDK SQLSelect 类有两个新属性。 - +
  • ReadOnly - 使 SQLSelect 变成只读
  • BatchUpdates - 控制如何处理更新
  • @@ -1463,7 +1482,7 @@ 现在,我们将这些命令的创建时间推迟到第一次需要时。 同时,我们还添加了一个只读属性,默认值为 FALSE。 如果将 ReadOnly 设置为 true,那么 - +
  • 调用 FieldPut()、Delete() 和 Append() 将产生 Gencode EG_READONLY 错误。
  • 不会为 SQLSelect 创建 Command 对象,因为游标无法更新。
  • @@ -1471,7 +1490,7 @@ 这些命令是在 __CreateDataAdapter() 方法中创建的。 您可以重写该方法,并在需要时在自己的子类中创建命令。 命令创建和更新的工作原理如下: - +
  • 首先,使用 SQLFactory 类中的 CreateDataAdapter 方法创建数据适配器(DbDataAdapter 类型)
  • 然后,通过 SQLFactory 类的 CreateCommandBuilder 方法创建一个 CommandBuilder 对象( DbCommandBuilder 类型)
  • 然后通过 DbCommandBuilder 对象的 GetInsertCommand() 等方法创建插入、删除和更新命令对象(均为 DbCommand 类型)。DBCommandBuilder 对象接收 Select 语句,并根据 SQLSelect 命令创建带参数的命令
  • @@ -1483,7 +1502,7 @@ 如果您的表有自动递增字段,那么您可能需要在之后调用 Requery() 来查看新分配的键值。 Visual Studio 集成 Bug 修复 - +
  • 修复了针对带有不同风味的项目的项目属性页面处理 (#992)
  • 尝试使用不存在的工作目录或程序文件名启动调试器时,现在会显示适当的错误 (#996)
  • 修正了表单设计器有时使用 #区域生成无效代码的问题 (#1020、#935)
  • @@ -1493,7 +1512,7 @@
  • 修正了 windows 表单编辑器无法打开带有基于 UDC 的命令的表单的问题 (#1037)
  • 源代码编辑器 - +
  • 全名的类型查找有时会失败,因为全名被定义为区分大小写(#978)
  • 嵌套类型查找有时会失败。现已修复。
  • 缩进选项现在也可以在 .editorconfig 文件中重写(#999)
  • @@ -1510,12 +1529,12 @@
  • 在编辑器中按 CTRL+SPACE 现在总是调用代码完成列表 (#957)
  • 新特性 - +
  • 在 VOWED 中添加了在选项卡控件中插入页面和重新排序页面的选项 (#1024)
  • 我们更新了 WPF 应用程序模板。主窗口现在称为 “MainWindow”。
  • 在 .editorconfig 文件中添加了以下新设置,以设置缩进选项 (#999)。
  • - +
  • indent_entity_content (true or false)
  • indent_block_content (true or false)
  • indent_case_content (true or false)
  • @@ -1524,13 +1543,13 @@
    VOXporter - +
  • 如果在 VO 应用程序中启用了允许 MEMVAR/Undeclared vars 编译器选项,VOXporter 现在可以正确启用或禁用这些选项 (#1000)
  • Changes in 2.11.0.1 编译器 Bug 修复 - +
  • 修正了 CLIPPER 调用约定委托时的内部编译器错误 (#932)
  • 修正了在运行时使用 usual 属性上的 null 运运算符 ?. 时出现的 AccessViolationException 异常 (#770)
  • [XBase++ 方言] 修正了带括号方法声明的解析问题 (#927)
  • @@ -1547,7 +1566,7 @@
  • 修正了一个可能导致 “Could not emit module” 错误信息的问题,该问题由 IIF() 表达式中的 NULL 值引起(#989)
  • 新特性 - +
  • 添加了编译器选项 /noinit ,以便不为没有 INIT 过程的库生成 $Init 调用,从而推迟加载 (#854)
  • 已添加 #stdout 和 #if 的预处理器支持 (#912)
  • 现在 #include 文件的全部内容都会写入 ppo 文件 (#920)
  • @@ -1558,12 +1577,12 @@
    Visual Studio 集成 新特性 - +
  • 源代码编辑器现在还支持新的 #if 和 #stdout 预处理器命令 (#912)
  • 有了新的 “灯泡 ”选项,可以为类生成构造函数。
  • Bug 修复 - +
  • 修正了在项目属性中指定自定义预处理器定义的问题(#909)
  • 在生成代码时,VO 风格编辑器现在保留了方法/构造函数的现有 “CLIPPER ”子句 (#913)
  • 修正了类之间相互嵌套的错误解析 (#939)
  • @@ -1579,7 +1598,7 @@
    运行时 新特性 - +
  • 为 array 类添加了 IEnumerable 构造函数 (#943)
  • 实现了缺失的函数 AdsSetTableTransactionFree() 和 AdsGetFTSIndexInfo() (#966)
  • 将函数 GetRValue()、GetGValue() 和 GetBValue() 从 Win32API 库移至 XSharp.RT,以便 AnyCPU 代码可以使用它们 (#972)
  • @@ -1589,7 +1608,7 @@
  • [VFP 方言] 实现了 MKDIR、RMDIR 和 CHDIR 命令 (#614)
  • Bug 修复 - +
  • 修复了 SDK 中 ListView TextColor 和 TextBackgroundColor ACCESSes 的一个问题 (#896)
  • 修复了软查找在发现 strict  键时不尊重顺序范围的问题 (#905)
  • 修正了 DBUseArea() 对不同文件夹中文件的搜索逻辑。此外,SetDefault() 不再使用当前目录初始化(为了兼容 VO)(#908)
  • @@ -1608,25 +1627,25 @@
  • [VFP 方言] 修正了 SCATTER TO 和 APPEND FROM ARRAY 的一个问题 (#821)
  • Typed SDK - +
  • 修正了标准打开对话框中文件名属性的一个问题
  • 修正了菜单构造函数中的 FOREACH 会导致处理异常的问题
  • RDD Bug 修复 - +
  • 修正了 DBFVFP RDD 中计算 nullable 键的键值大小的问题 (#985)
  • VOXporter Bug 修复 - +
  • 修正了错误检测字面字符串和注释中函数指针的问题 (#932)
  • Changes in 2.10.0.3 编译器 Bug 修复 - +
  • 修正了 FoxPro 方言中 COPY TO ARRAY 命令的一些问题 (#673)
  • 修正了在 SWITCH 语句中使用 System.Decimal 类型的问题 (#725)
  • 修正了 FoxPro 方言中 Type() 的内部编译器错误 (#840)
  • @@ -1637,7 +1656,7 @@
  • 修正了当函数/方法的参数为指针类型时,使用 @ 运算符解析通过引用传递的参数的问题(#899,#902)
  • 新特性 - +
  • 添加了编译器选项(-enforceoverride) 以便在覆盖父成员时强制修改 OVERRIDE(#786#846)
  • 在非本地上下文中使用 String2Psz() 和 Cast2Psz() 时,编译器会报错(因为这些 PSZ 会在退出当前实体时被释放) (#775)
  • 函数过程现在支持 ASYNC 修饰符 (#853)
  • @@ -1648,21 +1667,21 @@
    生成系统 Bug 修复 - +
  • 在 X# WPF 项目上运行 MsBuild 可能会失败 (#879)
  • Visual Studio 集成 新特性 - +
  • 我们为 VS 2022 添加了 Visual Studio 集成
  • 我们新增了对软件包引用的支持
  • 现在,当用户键入“///”时,编辑器会自动插入 XML 注释。(#867, #887)  条件:
  • - +
  • 光标必须位于实体开始前的一行上
  • 光标不得位于注释行之前
  • - +
  • 现在,类的工具提示还包括有关父类和已实现接口(如果有)的信息 (#860)
  • 我们为编译器内置的伪函数(如 PCount() 和 String2Psz())添加了工具提示、参数补全等功能。
  • 我们添加了第一个版本的灯泡提示。现在,我们只需实现缺失的接口成员,并将字段转换为属性。更多实现和配置选项将陆续推出
  • @@ -1672,7 +1691,7 @@
  • 我们在编辑器中加入了 "括号补全"
  • Bug 修复 - +
  • 修复了格式化文档命令的一些问题(#552)
  • 修复了参数工具提示的几个问题(#728、#843)
  • 修正了代码完成列表显示未定义的变量/标识符的问题 (#793)
  • @@ -1698,7 +1717,7 @@
    运行时 Bug 修复 - +
  • 修复了同时更新时可能出现的 DBFCDX 损坏问题 (#585)
  • 修正了打开带有允许 NULL 字段索引的 FoxPro 表的问题 (#631)
  • BlobGet() 函数返回的是逻辑值而不是实际字段值 (#681)
  • @@ -1719,7 +1738,7 @@ Changes in 2.9.1.1 (Cahors) 编译器 Bug 修复 - +
  • 修正了 2.9.0.2 中引入的一个问题,即定义符号在与 /vo8 编译器选项结合使用时不遵守 /cs 编译器选项 (#816)
  • 当启用 /fox2 编译器选项时,修正了对象初始化器内部赋值表达式的内部编译器错误 (#817)
  • 修正了 VOSTRUCTs 中日期的一些问题 (#773)
  • @@ -1727,14 +1746,14 @@
  • 修正了 SET CENTURY &cOn 等 UDC 的编译问题,因为 cOn 不是作为标识符而是作为关键字进行解析的。
  • 新特性 - +
  • 预处理器中有一个新的结果标记(NotEmpty 结果标记),它的作用与常规结果标记相同,但在输入中找不到匹配标记(可选)时,会向输出写入一个 NIL 值。
    由于 IIF 表达式内部的部分可能不是空的,因此当您想将结果作为 IIF() 表达式的一部分输出时,可以使用此方法。
    结果标记如下 <!marker!>
  • 以前不允许在 UDC 中使用受限匹配标记作为第一个标记。这一问题已得到解决。现在可以编写这样的规则,它将输出关键字(SCATTER、GATHER 或 COPY),然后是经过字符串化的选项列表。
  • #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // 被预处理为 ? "SCATTER" , "TO TEST"
       RETURN
    Visual Studio 集成 Bug 修复 - +
  • 修正了 2.9.0.2 中引入的 WPF 项目代码生成问题 (#820)
  • 修正了生成后 VS 冻结的问题 (#819)
  • 修正了包含 SELF 属性的源文件的代码折叠和导航栏的一些问题 (#825)
  • @@ -1757,7 +1776,7 @@
    新特性 - +
  • 我们在解决方案资源管理器的项目上下文菜单中添加了一个上下文项,用于编辑项目文件。这将在需要时卸载项目,然后打开文件进行编辑。
  • 现在,“工具/XSharp ”菜单中的 “重建 intellisense 数据库” 菜单选项会卸载当前解决方案,删除 intellisense 数据库,然后重新打开解决方案,以确保数据库正确重建。
  • 我们对在后台解析解决方案源代码的过程进行了一些更改。
  • @@ -1765,7 +1784,7 @@
    运行时 新特性 - +
  • 添加了丢失的 ErrorExec() 函数(#830)
  • 已添加对 BlobDirectExport、BlobDirectImport、BlobDirectPut 和 BlobDirectGet 的支持 (#832)
  • 修正了创建带有自定义文件扩展名的 DBF 文件时出现的问题。还增加了对 _SET_MEMOEXT 的支持 (#834)
  • @@ -1774,7 +1793,7 @@ Bug 修复 - +
  • 修正了 _PrivateCount() 引发 InvalidateOperationException 的问题 (#801)
  • 修正了编辑器中成员补全有时会显示错误类型方法的问题 (#740)
  • 修正了 ACopy() 函数的一些问题 (#815)
  • @@ -1782,40 +1801,40 @@
    宏编译器 新特性 - +
  • 添加了对 & 运算符的支持 (#835)
  • 为后期绑定的方法调用添加了对引用参数的支持(同时支持 @ 和 REF) (#818)
  • VOXporter Bug 修复 - +
  • 修正了在 PUBLIC 声明前添加“@@”不正确的问题
  • Changes in 2.9.0.2 (Cahors) 编译器 新特性 - +
  • 解析器现在支持多类型的类变量声明和全局声明(#709)
  • EXPORT var1 AS STRING, var2, var3 as LONG GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG - +
  • 如果您正在使用我们的分析程序,您应该注意 ClassVarList 规则已经消失,ClassVars、VoGlobal 和 ClassVar 规则已经更改。
  • - +
  • 我们添加了一条命令,用于在 foxpro 数组中填充单个值
  • STORE <value> TO ARRAY <arrayName> - +
  • 创建包含 DATE 字段的 VOSTRUCT 或 UNION 时,编译器现在将使用新的 __WinDate 结构,该结构与 Visual Objects 中 VOSTRUCT 或 UNION 中的 DATE 值存储方式二进制兼容 (#773)
  • 现在可以在 FoxPro 方言中使用括号(而不是方括号)访问 ARRAY 元素。必须启用编译器选项 /fox2 才能起作用 (#746)
  • 我们增加了对在调用函数/方法代码中访问 WITH 块表达式的支持(仅适用于 FoxPro 方言)。因此,您可以在调用代码中键入 .SomeProperty 并访问属于 WITH BLOCK 表达式的属性。要使用此功能,必须启用 “后期绑定”,因为编译器不知道调用代码中表达式的类型(#811)。
  • Bug 修复 - +
  • 当您对父类中不存在(虚)方法的方法使用 NEW 或 OVERRIDE 修饰符时,现在会产生一个错误(#586,#777)
  • 修正了数组中 USUAL 变量的逻辑 AND 和 OR 问题 (#597)
  • 某些编译器生成的代码(如后期绑定代码)的错误信息和警告并不总是指向正确的行号,而是指向方法或函数正文的第一行。这一问题已得到修复。(#603)
  • @@ -1840,7 +1859,7 @@
    运行时 新特性 - +
  • 我们为 Empty() 函数添加了几个强类型重载,这些重载应该会提高性能 (#669)
  • 我们在 RuntimeState 类中添加了一个事件处理程序。该事件处理程序名为 “StateChanged”(状态改变),预计将使用一个签名如下的方法:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    StateChangeEventArgs 类型具有设置枚举、OldValue 和 NewValue 的属性。
    如果您需要在 X# 运行时和外部应用程序(如 Vulcan 应用程序、VO 应用程序或外部数据库服务器,如 Advantage)之间同步状态,则可以使用此功能。
  • 我们添加了一个新的(内部)类型 __WinDate,用于在 VoStruct 或 Union 中存储日期值。该字段与 VO 存储在结构体和联合体内的 Julian 日期二进制兼容。
  • @@ -1849,7 +1868,7 @@
    Bug 修复 - +
  • 修正了 Descend() 函数中的一个问题(与 VO 不兼容)(#779) - 重要提示:如果在 dbf 索引表达式中使用 Descend(),则需要重键这些索引!
  • 返回 PSZ 值的后期绑定代码没有正确地将该值存储在 USUAL 内(#603)
  • 修正了缓存 IO 中可能导致低级文件 IO 问题的一个问题 (#724)
  • @@ -1864,7 +1883,7 @@
  • 修正了 Directory() 包含按短名匹配而不按长名匹配的文件的问题 (#800)
  • RDDs - +
  • 使用 DBFCDX 驱动程序创建新 DBF 时,不会再自动删除现有 CDX 文件 (#603)
  • 修复了在 DBFCDX 中更新备注内容的问题 (#782)
  • 修复了创建 DBFCDX 索引文件时出现的运行时异常,文件名较长 (#774)
  • @@ -1873,12 +1892,12 @@
  • 修正了 VODBOrdCreate 函数在 cOrder 参数包含空字符串时失效的问题 (#809)
  • 宏编译器 - +
  • 修正了预处理器中的一个问题
  • 添加了对使用 @ 操作符通过引用传递参数的支持
  • 在宏编译器中添加了对 M->、_MEMVAR-> 和 MEMVAR-> 前缀的支持
  • 当宏编译器发现 2 个或更多同名函数时,它现在会使用与编译器相同的优先级规则:
  • - +
  • 首先使用用户代码中的函数
  • "特定" 运行时(XSharp.VO、XSharp.XPP、XSharp.VFP、XSharp.Data)中的函数优先于 XSharp.RT 和 XSharp.Core 中的函数。
  • XSharp.RT 中的函数优先于 XSharp.Core 中的函数
  • @@ -1888,9 +1907,9 @@ 在本次生成中,我们开始使用 GitHub 上的 “Community toolkit for Visual Studio extensions”。该工具包包含针对 VS 扩展编写者代码的 “最佳实践”,就像我们一样。因此,现在有更多代码以异步方式运行,这将带来更好的性能。 我们还开始删除 32 位特定代码,这些代码在迁移到 VS 2022(Visual Studio 的 64 位版本,预计将于 2021 年 11 月发布)时会成为问题。 新特性 - +
  • 为编辑器添加了多项新功能
  • - +
  • 编辑器现在可以显示实体之间的分隔线。您可以在选项对话框中启用/禁用该功能(#280)
  • QuickInfo 工具提示中的关键词现在已着色 (#748)
  • 转到定义 “现在也适用于 ”外部 "类型。编辑器会生成一个临时文件,其中包含外部类型的类型信息。在选项对话框中,您还可以控制生成的代码是否包含注释(从外部 DLL 附带的 XML 文件中读取)。(#763)
  • @@ -1898,16 +1917,16 @@
  • 您可以通过 “工具/选项 ”菜单项(PRIVATE 或 HIDDEN)控制用于 PRIVATE 可见性的关键字。
  • - +
  • 现在,VS 内的各种代码生成器都遵循源代码编辑器的大写规则。
  • 现在, intellisense 数据库的视图可返回源代码和外部程序集中的唯一命名空间
  • 工具菜单中的 X# 特定菜单项已移至单独的子菜单中。
  • 为 WinForms 设计器添加了选项,以便在保存时生成 form.prg 和 form.designer.prg 文件的备份(.bak)文件 (#799)
  • Bug 修复 - +
  • 修复了编辑器中的几个问题:
  • - +
  • 我们对编辑器进行了多项改进以提高速度(#689、#701)
  • 修正了 FOREACH 循环中变量类型查找的一个问题 (#697)
  • 未显示从完成列表中选择的方法的参数提示(#706)
  • @@ -1927,14 +1946,14 @@
  • 修正了在某些情况下输入无效代码时出现的编辑器异常 (#791)
  • - +
  • Windows 窗体的代码生成器将制表符替换为空格。这一问题已得到修复。(#438)
  • 修复了表单设计器损坏包含 EXPORT ARRAY OF <type> 的代码的问题
  • 修复了表单设计器中的一个问题,即在编辑器中删除事件处理程序时,某些代码会被删除 (#812)
  • 修正了表单设计器将 EXPORT、INSTANCE 和 HIDDEN 关键字转换为 PUBLIC 和 PRIVATE 的问题 (#802)
  • VO-兼容编辑器 - +
  • 现在,所有兼容 VO 的编辑器都支持完整的撤消/重做功能。还为菜单编辑器添加了剪切/复制/粘贴功能
  • 修复了设计和测试模式下 VOWED 控件的若干视觉问题 (#741)
  • 修复了在 “属性 ”窗口有焦点时,Alt-Tab 键跳出编辑器时 VS 崩溃的问题 (#764)
  • @@ -1947,13 +1966,13 @@ Changes in 2.8.3.15 (Cahors) 编译器 新特性 - +
  • 现在,您可以在变量名或数字之间使用 .AND. 逻辑运算符和 .OR. 逻辑运算符,而无需前导或尾部空白 (a.AND.b)
  • FoxPro 方言中的 PRIVATE 声明不再允许初始化器。
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { .. }))的支持
  • Bug 修复 - +
  • 修正了在 DIM 数组中使用 DEFINE 作为维数的问题 (#638)
  • 修正了 FoxPro PUBLIC ARRAY 命令的一个问题(ARRAY 关键字不再是强制性的)(#662)。
  • 修正了以 DEFAULT(Usual) 表达式作为函数/方法调用参数的问题 (#664)
  • @@ -1967,7 +1986,7 @@
    运行时 Bug 修复 - +
  • 运行时状态中的 _shutdown 标志现在会在系统关闭时设置。
  • 修正了 FoxPro ALen() 函数的一个问题 (#650)
  • 在多个位置添加了默认值(#678)
  • @@ -1978,7 +1997,7 @@
    宏编译器 新特性 - +
  • 现在,您可以在变量名或数字之间使用 .AND. 运算符,而无需前导或尾部空白
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { . . })的支持
  • 宏编译器不再重新格式化包含 .AND. 和 .OR. 的字符串 (#694)
  • @@ -1988,11 +2007,11 @@
    请测试这一新功能,并告诉我们您的想法。
    Visual Studio 集成 新特性 - +
  • 当光标位于实体之外时(例如文件开头的 USING 语句),“高亮显示单词 ”现在可以高亮显示整个文件中的单词。
  • Bug 修复 - +
  • 修正了在兼容 VO 的 Windows 编辑器工具箱中显示自定义控件名称的问题
  • 修正了从与 VO 兼容的 Windows 编辑器的 cavowed.inf 中加载设置时出现额外空格的问题
  • 修正了赋值语句后的完成列表不正确的问题 (#658)
  • @@ -2006,13 +2025,13 @@
  • 修正了完成列表中显示不正确方法的问题 (#695)
  • 工具 - +
  • 修正了 VOXPorter 中有关资源和复制到资源子文件夹的问题
  • Changes in 2.8.2.13 (Cahors) 编译器 - +
  • 修正了扩展方法未标记为 STATIC 的问题 (#660)
  • 修正了 IIF() 表达式在返回 OBJECT 时被赋值为十进制的问题。
  • pragma 命令没有检查当前方言
  • @@ -2023,7 +2042,7 @@
  • 启用 /vo7 时,现在支持从 OBJECT -> NUMERIC 的隐式转换。
  • 运行时 - +
  • 现在,在 FOREACH 循环中枚举 USUAL 变量将调用一个运行时函数,该函数将返回 USUAL 中的 ARRAY,否则将抛出错误 (#246)
  • 修正了一个问题,即创建索引时有一个 “val ”块和 0 条记录 (#619)
  • 与 FoxPro 相比,修正了与 ALen() 函数和数组处理不兼容的问题 (#642)
  • @@ -2037,16 +2056,16 @@
  • 我们新增了 MemCheckPtr() 的实现 (#677)
  • 宏编译器 - +
  • 修正了在使用 Assembly.Load() 加载新程序集后调用函数的问题
  • 已添加对通过引用传递变量的支持(尚未支持使用 Clipper 调用约定的函数)(#653)
  • VO SDK - +
  • 修正了 GUI 类中 GetObjectByHandle() 的一个问题(#677)
  • Visual Studio 集成 - +
  • 修复了 VS 内部 “生成” 页面上的一个异常 (#654)
  • 项目系统没有为 XML 文档生成写回正确的属性 (#654)
  • 头文件中的 intellisense 可能会崩溃(#657)
  • @@ -2060,23 +2079,23 @@
  • 当没有更改文件时,提高了 Visual Studio 中的生成速度(#675)
  • 工具 - +
  • VO Xporter 在输出文件夹的 .xsproj 文件中生成了 2 行 (#672)
  • Changes in 2.8.1.12 (Cahors) 编译器 - +
  • 修正了插值字符串的问题(#598、#622):
  • - +
  • 脚本编译器现在能正确设置运行时中当前活动方言的 AllowDot 编译器选项(Core 和 FoxPro:AllowDot = true)
  • 当使用 DOT(.) 作为实例方法分隔符进行编译时,插值字符串内部会使用“: ”字符作为格式字符串的前缀。
  • 使用 COLON (:) 作为实例方法分隔符进行编译时,冒号不能用于分隔表达式和插值字符串内的格式字符串。在这种情况下,我们现在支持在表达式和格式字符串之间使用双冒号(::)。例如
  • LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // 该数字为两位小数
    WAIT
    - +
  • 现在可以在 VOSTRUCT 和 UNION 中使用 DATE 字段 (#595)
  • 修正了 “UnconvertedConditionalOperator ” assertion 错误 (#616)
  • 当使用命名空间 “xsharp ”时,修正了编译器中的 assertion 错误 (#618)
  • @@ -2086,7 +2105,7 @@
  • 修正了一个问题,即对于 USUAL 类型的变量,“IS Pattern” 并非总能正常工作 (#636)
  • 运行时 - +
  • 实现了 FoxPro Evl() 函数(#389)
  • 即使没有打开区域,DbCloseArea() 也会返回 TRUE。这与 VO 不兼容。现在我们将返回 FALSE。(#611)
  • 宏编译器无法在动态加载的程序集中找到函数 (#607)
  • @@ -2099,15 +2118,15 @@
  • 修复了 AELement() 函数的一个问题 (#639)
  • RDD 系统 - +
  • 当索引表达式包含 “nullable ”字段时,修正了使用 SqlExec() 函数创建的工作区/游标上的索引问题 (#630)
  • 宏编译器 - +
  • 宏编译器在查找稍后加载的程序集内的函数时遇到问题(#607)
  • Visual Studio 集成 - +
  • 修复从常规页面保存方言的问题
  • 快速信息和转到定义对同一类内的成员不起作用,如果这些成员的前缀不是 SELF:
  • 修复使用“? ”语法的允许 null 值的类型的代码完成问题 (#567)
  • @@ -2124,14 +2143,14 @@
  • 在编辑器中,局部变量并非总能以正确的类型被识别(#651)
  • 安装 - +
  • 安装程序将错误版本的 XSharp.CodeAnalysis.dll 添加到了全局程序集缓存中。这一问题已得到修复。
  • Changes in 2.8.0.0 (Cahors) 编译器 常规 - +
  • 我们已迁移到最新版本的 Roslyn 源代码。
  • 通过引用将类型化变量传递给具有 clipper 调用约定(未类型化参数)的函数/方法时,无法更新局部变量。这一问题已得到修复。
  • /vo7 编译器选项未启用时,在 VO 方言的程序中使用 @ 操作符可能会生成产生 “无法装箱 ”错误的代码。(#551)
  • @@ -2141,16 +2160,16 @@
  • _SIZEOF() 操作符现在将为 VOSTRUCTS 和 UNIONS 生成一个常量。(#545)
  • 使用关键字作为字段名可能会导致问题。例如,FIELD->NEXT 就处理不当。现在编译器允许这样做了。当然,您也可以使用 @@ 前缀来告诉编译器,在特定情况下,您指的不是关键字,而是一个标识符。
  • - +
  • 包含表达式列表的括号表达式无法正确编译。这一问题已得到修复。
    如果您想在一个 IIF() 表达式中包含多个表达式,就会出现这种情况。
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    由于 Roslyn(C# 编译器)不允许在条件表达式中使用表达式列表,因此我们现在将括号表达式转换为对局部函数的函数调用。括号表达式中的表达式将成为新局部函数的主体,编译器将调用生成的局部函数。
  • 现在,如果在有同名成员的类中调用 Function,编译器会发出警告。例如
  • CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // 这会产生警告,说明调用的是函数 Left() 而不是方法 Left()。
                             // 如果要调用该方法,则必须在调用前加上 SELF:
    END CLASS
    新的语言特性 - +
  • 我们增加了对 LOCAL FUNCTIONLOCAL PROCEDURE 语句的支持。
    这些函数和过程会成为另一个函数、过程、方法等的语句列表的一部分。它们有以下限制:
  • - +
  • LOCAL FUNCTION 必须以 END FUNCTION 结束,LOCAL PROCEDURE 必须以  END PROCEDURE 结束。
  • 支持普通函数的全部 “签名”,包括参数、返回类型、类型参数和类型参数约束。
  • 它们不能有属性(它们不是编译到方法中,而是编译到一种特殊的 Lambda 表达式中)
  • @@ -2161,24 +2180,24 @@
    - +
  • 已添加对表达式体成员的支持。通过表达式体定义,您可以以非常简洁、易读的形式提供成员的实现。只要任何受支持成员(如方法或属性)的逻辑由单个表达式组成,您就可以使用表达式体定义。表达式体定义的一般语法如下:
    MEMBER => expression
    一个表达式体方法由一个单一表达式组成,该表达式返回一个值,其类型与方法的返回类型匹配,或者对于返回 void 的方法,执行某些操作。例如,重写 ToString 方法的类型通常包括一个单一表达式,该表达式返回当前对象的字符串表示形式。
    例如
  • CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    这段代码的结果与以下代码完全相同

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    因此,可以说 => 操作符取代了 RETURN 关键字。 - +
  • 我们添加了对 C# 的 NULL 合并操作符 (??) 以及 NULL 合并赋值操作符 (??=) 的支持。
    该操作符对 != null 进行检查。该运算符只适用于引用类型,不适用于 USUAL、DATE 等值类型和 INT 等内置类型。
  • FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // ?? 是 NULL 合并操作符
    s ??= "abc"               // 这与之前的结果相同,但更紧凑
    ? s
    RETURN
    // 因此,这将无法编译
    LOCAL i := 0 AS LONG
    i := i ?? 42      // 操作符“?? ”不能应用于 “int ”和 “int ”类型的操作数
    // 但这可以编译
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    - +
  • 我们为带有 INIT 访问器的属性添加了支持。通过这些访问器,您可以为属性赋值,但只能在构造函数中进行。该属性只能在类/结构的构造函数之外读取。
  • 我们添加了一个新的编译器选项 /enforceself。使用该选项后,类内对实例方法的所有调用都必须以 SELF(或 SUPER)作为前缀。在 FoxPro 方言中,也支持此选项。请注意,某些生成的代码(如 Windows 窗体编辑器中的代码)并不使用 SELF:,应用此编译器选项可能会迫使您更改生成的代码,或者可能会迫使您在代码中添加 #pragma options(“enforceself”, disable) 以禁用该文件的选项。
  • 我们添加了一个新的编译器选项 /allowdot 。通过该选项,您可以控制是否允许使用 DOT(“.”)运算符访问实例成员。Core 和 FoxPro 方言的默认值是 /allowdot+。其他方言的默认值为 /allowdot-。也可以通过 #pragma 来使用: #pragma options(“allowdot”, enable)
  • 源代码中的 XML 注释不再需要完全限定的 cref 名称(#467)
  • 预处理器 - +
  • 预处理器现在会自动声明一个名称为 <udc> 的匹配标记。该匹配标记将包含预处理器与 UDC 匹配的所有标记。例如,它可以用来将原始源代码作为字符串添加到结果中:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • 通配符标记(如上一条中的 dbfAndFields 标记)现在也可以出现在 UDC 中间。它们将继续匹配,直到找到通配符标记(上例中为 FROM 关键字)后的第一个标记。
  • 标准头文件(来自 XSharp\Include 文件夹)现在也作为资源包含在编译器中。当文件丢失时,这些文件将从资源中加载。
  • @@ -2186,19 +2205,19 @@
  • 当通配符标记与 stringify 结果标记一起包含时,这些标记之间的空白会正确地包含在 UDC 的输出中。
  • FoxPro 方言 - +
  • 上一个版本中添加的允许将括号作为 FoxPro 方言数组分隔符的功能有太多副作用。我们暂时删除了这一功能。您必须再次使用带方括号的数组参数。
  • - +
  • 不再需要 /fox2 编译器选项(编译器会忽略该选项)。
    编译器现在会检查运行时函数是否被标记为 NeedsAccessToLocalsAttribute,(XSharp.Internal 名称空间中定义的 NeedsAccessToLocalsAttribute)。
    如果编译器发现一个函数标有此属性,如 Type() 函数或 SQLExec() 函数,那么它将在函数调用前后添加一些代码,以允许这些函数访问堆栈上的局部(变量)。只有启用了 /memvar 编译器选项,并且仅在 FoxPro 方言中才会发生这种情况。
    NeedsAccessToLocalsAttribute 有一个强制参数,用于指示函数是要写入局部(变量)还是只读取局部(变量)。
    当函数需要写入局部(变量)时,编译器会在调用后生成额外的代码,以确保在需要时更新局部(变量)。
  • - +
  • 我们为 FoxPro 嵌入式 SQL 语句添加了一个标准头文件。该头文件应能解析嵌入式 SQL,但会输出尚未支持嵌入式 SQL 的警告。
  • 我们添加了对 FoxPro 数组的支持,在运行时为数组类型添加了一个特殊的子类型,并支持 DIMENSION 和 (Re)DIMENSION 以及通过分配单个值来填充数组。(#523)
  • 运行时 常规 - +
  • 修正了 FSeek() 和 FSeek3() 返回值的一个问题
  • AsHexString() 和 AsString() 对 PTR 值的显示结果与 Visual Objects 不一致。
  • 修复了 DBFCDX RDD 的 SetScope() 在前一个作用域为空时的问题 (#578)
  • @@ -2212,7 +2231,7 @@
  • 我们添加了几个函数,它们可以弹出对话框,显示当前打开的工作区、设置、全局变量以及私有和公共内存变量。请参见 DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() 和 DbgShowSettings()
  • RDD 系统 - +
  • 当工作区只读打开时,DbCommit 和 DbCommitAll 会失败。该问题已得到修复。(#554)
  • 当 FoxPro CDX 文件有多个标志,而其中一个标志的索引表达式无效时(例如,Visual Objects 接受缺失的结尾括号),RDD 系统根本无法打开 CDX。现在我们打开 CDX,但索引表达式已损坏的标记除外。(#542)
  • 已添加对 Advantage GUID 和 Int64 列的支持。GUID 以字符串形式返回,INT64 以 INT64 形式返回。我们还添加了 ACE 头文件中一些缺失的 DEFINE 值。
  • @@ -2225,27 +2244,27 @@
  • 更改了几个 ADS 方法原型,使其具有正确的 IN / OUT 修饰符 (#568)
  • 宏编译器 - +
  • 修正了 FoxPro 方言中以 VariableName.PropertyName 形式为表达式赋值的问题
  • X# 宏编译器允许在宏中引用 GLOBAL 和 DEFINE 值。这使得编译器与 VO 不兼容,当索引与 GLOBAL 或 DEFINE 同名的字段时会出现问题。宏编译器已不再支持引用 GLOBAL 或 DEFINE。(#554)
  • 宏编译器在变量名被括号包围时遇到了问题。编译器将其视为类型转换。现已修复。(#584)
  • Visual Objects SDK - +
  • 为 Win32APILibrary 程序集添加了一些缺失的定义,如 DUPLICATE_SAME_ACCESS。
  • DbServer:Filter 有时会返回 NIL 而不是空字符串 (#558)
  • VO 方言 - +
  • 我们新增了对 SysObject 的支持 (#596)
  • Xbase++ 方言 - +
  • 修正了 2.7 中引入的 XPP Collation 表问题
  • FoxPro 方言 - +
  • /fox2 编译器选项添加了 NeedsAccessToLocalsAttribute 属性
  • 调整了向 Type() 和 SqlExec() 等函数公开 LOCAL 变量值的代码。
  • 有几个函数已经标记了新属性,这样它们就能 “看到” 局部变量。
  • @@ -2263,7 +2282,7 @@ Visual Studio 集成 此版本中的 Visual Studio 集成不再支持 Visual Studio 2015。仅支持 Visual Studio 2017 和 2019。 常规 - +
  • 在子文件夹中生成的新代码模板的命名空间名称以 “global:: ”开头。这一问题已得到修复。
  • 已添加对 LOCAL FUNCTION 和 LOCAL PROCEDURE 的支持。
  • 从文件夹中的类模板添加项目时,命名空间前缀为 “global::”。这一问题已得到修复。
  • @@ -2278,7 +2297,7 @@
    源代码编辑器 - +
  • 较长的 “QuickInfo ”工具提示现在会多行显示,以便于阅读。
  • 重构了 “类型查找 ”代码,以提高源代码编辑器的运行速度
  • 对于使用 VAR 关键字声明的变量,如果存在嵌套的大括号和/或小括号,源代码编辑器中的成员补全并不总是有效。(#541, #560)
  • @@ -2292,11 +2311,11 @@
    代码生成器 - +
  • 字符字面现在总是以 “c ”为前缀,值 > 127 则以十六进制符号书写,以确保它们在所有代码页中都能正常工作。
  • Windows 窗体设计器 - +
  • 我们修复了 DevExpress 控件的几个问题。
  • 修正了与 X# 关键字同名的控件的问题 (#566)
  • 修正了具有 DWORD 类型属性的控件的一个问题 (#588)
  • @@ -2304,11 +2323,11 @@
  • .designer.prg 不再需要有 “INHERIT FROM ”子句。(#533)
  • 对象浏览器 - +
  • 当您首先执行搜索时,转到定义不起作用 (#565)
  • VO 兼容窗体设计器 - +
  • 在 WED 中添加了支持,可正确直观地显示未定义预期控件类继承的自定义控件
  • 修正了 cavowed.inf 中无法识别非数据感知自定义控件的问题
  • 已添加对克隆 Windows 的支持(#508)
  • @@ -2317,12 +2336,12 @@
  • 在 “工具/选项 ”中有一个菜单选项,可设置多项设置(#279,#440)
  • 调试器 - +
  • 调试器现在完全支持 64 位调试
  • 已添加对 CURRENCY 和 BINARY 新类型名称的支持
  • 模板 - +
  • 我们对多个 VS 项目模板和项目模板进行了调整 (#589)
  • 我们新增了 X# t4 模板(.tt 文件)
  • @@ -2330,39 +2349,39 @@ Changes in 2.7.0.0 (Cahors) 编译器 常规 - +
  • 修正了 Nullable 类型的一个问题,这些类型在赋值时缺少显式转换
  • - +
  • 修正了在类层次结构中调用父类构造器时跳过父类层次而调用祖类构造器的问题。
  • - +
  • /usenativeversion 命令行选项未检查 +/- 开关。现已修复。
  • 修正了在文件名中包含嵌入式 DOT 的源文件(my.file.prg)中 PCall() 和 PCallNative() 的一个问题
  • 我们在 XSharp\Include 文件中添加了一个新的头文件,它可以帮助添加自定义用户定义命令或定义,你可以将其包含在每个项目中。我们的 XSharpDefs.xh 将自动包含该文件(CustomDefs.xh)。
    该文件的默认内容只是一些注释。
    安装程序不会覆盖该文件夹中的文件,卸载产品时也不会删除该文件。
    您可以选择在项目文件下的包含文件夹中自定义该文件。不过,您也可以将同名文件添加到项目文件夹或项目/解决方案的通用包含文件夹中。最后一个位置可以让您将头文件与其他源代码一起置于源代码控制之下。
  • FoxPro 方言 - +
  • 编译器现在允许在 LOCAL、PRIVATE 和 PUBLIC 声明中使用 M Dot (M.) 前缀。(LOCAL m.Name)
  • 在 Foxpro 对话框中,编译器现在也接受小括号作为数组分隔符 (aMyArray(1,2))
  • 编译器现在允许(或忽略)PRIVATE、PUBLIC、PARAMETERS 和 LPARAMETERS 声明中的 AS Type OF Classlib 子句。
  • - +
  • 支持 TRY CATCH 的 CATCH 子句中的 TO 关键字
  • 已添加对 ASSERT 命令和 SET ASSERT 的支持
  • - +
  • 已添加对 SET CONSOLE 和 SET ALTERNATE 的支持
  • 使用单个等号运算符对宏进行赋值时不起作用(&myVar = 42)。这一问题已得到修复。
  • 已添加对零长度二进制字面量 (0h) 的支持
  • 生成系统 - +
  • 添加了一个项目属性,用于控制本地资源编译器是否抑制 RC4005 错误(重复定义)。
  • 运行时 常规 - +
  • IsMethod() 现在对重载方法返回 TRUE。
  • AbsFloat() “丢失” 了小数位数的设置。现已修复。
  • Binary:ToString() 在二进制值小于 15 时使用了个位数。现已修复。
  • @@ -2377,24 +2396,24 @@
  • 我们添加了一个 DatabasePropertyCollection 类型。该类型用于向字段添加 “附加 ”属性,如 FoxPro 表的 DBF 字段。.
  • 终端 API - +
  • 我们新增了对备用文件的支持。SET ALTERNATE TO SomeFile.txt。还可设置 ALTERNATE ONSET ALTERNATE OFF
  • ? 命令 现在尊重 Set Console 和 Set Alternate 的会话。
  • 我们新增了对 SET COLOR 命令的支持。只使用设置中的第一个颜色,闪烁属性将被忽略并解释为 “高亮”。例如 SET COLOR TO w+/b
  • 我们增加了一个 CLEAR SCREEN 命令
  • FoxPro 方言 - +
  • 添加了 Assert 对话框
  • 已添加对 DBC 文件的支持。这包括 SET DATABASE to 命令、DbGetProp() 以及读取作为数据库一部分的文件的属性,而无需首先显式打开数据库。目前,DbSetProp() 还不能执行任何操作。此外,DbAlias() 等类似函数也已实现。
  • 运行时现在可以使用 DataSession 对象。DBC 文件和每个线程中的文件一样,都在各自的 DataSession 中打开。每个 DataSession 都有一个已打开表的列表,以及别名和游标/工作区编号的唯一列表。
  • 现在,SqlExec() 返回的游标中的 “自增”(AutoIncrement)列的编号方法是从 -1 开始,每增加一行就减去 1。
  • - +
  • FoxPro 方言所需的若干设置已添加到 Set Enum.
  • 宏编译器 - +
  • 到目前为止,宏编译器生成的运行时代码块都是接收对象数组并返回对象返回值。运行时中有一个类对此进行了封装,并负责参数的 usual->object 转换以及返回值的 object->usual 转换。当宏返回 NIL 值时就会出现问题,因为该值会被转换为 NULL_OBJECT。
    之所以使用 OBJECT API,是因为宏编译器需要在 Core 方言(RDD 系统)中使用,而该方言不支持 USUAL 类型。
    现在,我们在 XSharp.RT 程序集中添加了一个新的 IMacroCompilerUsual 接口,允许将字符串编译成支持 USUAL 参数和 USUAL 返回值的代码块。宏编译器现在同时支持该接口和 “旧 ”接口。因此,在编译宏时,您可能会看到(非常小的)性能改进。
  • 不支持在宏内调用 Altd() 和 _GetInst()。现已修复。
  • 当您在自己的代码中重载内置函数时,宏编译器会报错。现在,我们已在运行时中实施了默认的 MacroCompilerResolveAmbiguousMatch 委托,该委托会优先使用您代码中定义的函数,而不是我们代码中的函数。
  • @@ -2403,7 +2422,7 @@
  • 在宏编译器中添加了对 CURRENCY 和 BINARY 类型的支持。
  • RDD 系统 - +
  • 独占 DBF 访问现在以 “缓冲” 模式运行,速度应该会快很多
  • 在内部,RDD 现在与 Stream 对象一起工作,这样速度会更快一些。
  • 修正了更新索引中存在大量重复键值的键时出现的问题。
  • @@ -2415,7 +2434,7 @@
  • 我们在 RDD 程序集中添加了 ADS 管理 API 的结构和功能。
  • Visual Studio 集成 - +
  • 在 VS IDE 中创建新的 VO 兼容 UI 表单时,现在可以克隆现有表单。
  • 修正了 VO 兼容表单编辑器中自定义控件的一些问题。
  • 修正了 Windows 窗体编辑器中 DevExpress 控件代码分析和代码生成的几个问题
  • @@ -2427,13 +2446,13 @@ Changes in 2.6.1.0 (Cahors) 这是一个错误修复版本,修复了 2.6.0.0 中发现的一些问题 编译器 - +
  • 修正了通过引用将类型化变量传递给后期绑定代码和未类型化构造函数的问题
  • 修正了代码中包含逻辑的定义被转换为字节时的内部编译器错误
      BYTE(_CAST, LOGICDEFINE).
    当然,这种代码在任何时候都应该避免,但遗憾的是,即使是 VO SDK 也充斥着这样的代码。
    例如,上例应写成 IIF(LOGICDEFINE,1,0)。编译器会发现该定义是常量,并用 1 或 0 替换该代码。
  • 编译器无法将 $.50 识别为有效的货币字面量(因为缺少 0)。现在可以接受了。
  • 运行时 - +
  • 更新了运行时中处理后期绑定调用的代码,以改进对引用参数的处理
  • 修复了访问 OleAutoObject 类中 fInit、dwFuncs 和 dwVars 等属性时,后期绑定代码中的一个问题
  • 为 “Usual” 类型添加了操作符 TRUE 和操作符 FALSE
  • @@ -2442,7 +2461,7 @@
  • 添加了 DbTableSave() 函数,用于将 DbDataTable 中的更改保存到当前工作区。
  • Visual Studio 集成 - +
  • 打开和升级 Scc 下的项目文件有时会导致问题。现已修复
  • 修正了 2.6.0.0 中引入的导致任务列表不再更新的问题。
  • 打开引用磁盘上不存在的 X# 项目的解决方案可能会导致异常。该问题已得到修复。
  • @@ -2455,7 +2474,7 @@ 请注意,此版本中有一些破坏性更改。 因此,运行时组件的 Assembly 版本号已更改,您需要重新编译所有代码,并需要第三方组件的新版本! 编译器 - +
  • 编译器忽略了 (USUAL) 大小写。现已修复。
  • 当编译器检测到 TRY ...ENDTRY(不含 CATCH 和 FINALLY)时,它会自动添加一个 CATCH 类,以静默方式捕获所有异常。以前就有这种情况,但现在出现这种情况时,我们会生成警告 XS9101 。
  • 在调用后期绑定的方法时,通过带 @ 符号的引用传递参数无法正常工作。这一问题已得到修复。
  • @@ -2475,32 +2494,32 @@
  • 在 TRY ... CATCH 语句中添加了对模式匹配(WHEN 子句)的支持,例如下面的示例。WHEN 关键字是位置性的,因此也可用作变量名,如示例中的变量名。
  • FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    - +
  • 已添加对 SWITCH 语句的模式匹配和筛选器的支持。我们既支持 “标识符 AS 类型 ”子句,也支持 “WHEN 表达式 ”过滤子句,如下例所示
  •   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // 这种模式现在被称为 "恒定模式"
            ? "One"
         CASE 2 WHEN foo == 42         // 恒定模式过滤器
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
      VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // 模式匹配
            ? "Long", i
         CASE r8 AS REAL8   // 模式匹配
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // 带有过滤器的模式匹配
            ? "String abc", s
         CASE s AS STRING     // 模式匹配
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // 带有过滤器的模式匹配
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    - +
  • 请注意,这些模式和过滤器的性能与普通的 IF 语句或 DO CASE 语句无异。
    所不同的是,编译器会检查 CASE 表达式是否重复,这样就不容易出错。
  • 我们增加了对 IN 参数修饰符的支持。它声明了一个 REF READONLY 参数。在向方法或函数传递大型结构时,可以考虑使用该参数。编译器不会传递整个结构,而只会传递结构的地址,即 4 字节或 8 字节,具体取决于运行的是 32 位还是 64 位。
    我们计划在 X# 运行时将其用于接受 USUAL 参数的函数,这将为您带来微小的性能优势(在 32 位模式下,Usual 变量为 16 字节,在 64 位模式下运行时为 20 字节)。
  • 运行时 - +
  • 延迟绑定代码中的错误信息并不总是显示导致异常的错误。我们现在检索 “最内部 ”异常,因此信息会显示抛出的第一个异常。
  • 我们添加了 Set.Safety 和 Set.Compatible 的运行时状态设置,以及 SetCompatible 和 SetSafety 函数。
  • - +
  • 用于为各种 Db..()函数保存和恢复工作区的 UDC 不正确,导致在函数调用后选择了错误的区域。这一问题已得到修复。
  • - +
  • 添加了 VFP MkDir() 函数。
  • 修正了当一个类型的子类只实现了 Getter 或 Setter 而父类同时实现了两者时,在后期绑定的 IVarGet() / IVarPut() 中出现的问题。
  • - +
  • 我们添加了 IDynamicProperties 接口,并在 XPP DataObject、VFP Empty 和 VO OleAutoObject 类中添加了该接口的实现。该接口用于优化对这些类中属性的后期绑定访问。
  • OleAutoObject.NoMethod 中的异常没有 “原样 ”转发,而是作为参数异常转发。
  • - +
  • 为了与 FoxPro 兼容,Select() 函数现在在 FoxPro 方言中的行为有所不同(当传递的别名不存在时不会出现异常)
  • 当从一个异常创建一个 Error 对象时,最内层的异常将被用于获取错误信息。
  • Default() 函数的大小写已更改。
  • @@ -2508,7 +2527,7 @@
  • 我们在 dbcmd.xh 中添加了 CLOSE ALL UDC,作为 CLOSE DATABASES 的同义词。
  • RDD 系统 - +
  • 当字段名大于 10 个字符时,修正了 ADSADT 驱动程序的 Advantage RDD 中的一个问题。
  • 在 Advantage RDD 中,作为关系中子表的表的 EOF、BOF 和 FOUND 标志设置不当。这一问题已得到修复。
  • 在 FoxPro 方言中,“自动排序” 行为发生了变化。在该方言中,不再选择第一个索引中的第一个顺序。索引文件已打开,但文件保持自然顺序,打开文件时光标定位在记录编号 1 上。
  • @@ -2518,7 +2537,7 @@
  • 修正了 OrdDescend() 函数的一个问题
  • Visual Studio 集成 - +
  • 修正了参数列表中默认表达式的 VS 解析器问题
  • 外部方法/函数的参数并不总是显示正确的 “As”/“Is ”修饰符
  • 现在,QuickInfo 工具提示上的位置显示在工具提示内的独立一行上。
  • @@ -2529,12 +2548,12 @@
  • 在查找 Foo.SomeMethod() 等方法时,代码模型有时会返回 Bar.SomeMethod() 方法。
    这导致在 Windows 窗体编辑器中打开窗体时出现问题。这一问题已得到修复。
  • VO 兼容的编辑器 - +
  • 现在,从 VO 兼容编辑器生成的代码保留了类的 INTERNAL 或其他修饰符以及 IMPLEMENTS 子句。
  • 我们更正了按钮控件中 “LoadResString ”标题的显示方式
  • Foxpro 命令 - +
  • 我们增加了对几个新的 Foxpro 兼容命令的支持:
  • CLOSE ALL
  • SCATTER
  • @@ -2545,32 +2564,32 @@
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • 所有变体都支持 fields list、FIELDS LIKE 或 FIELDS EXCEPT 子句,相关命令还支持 MEMO 和 BLANK 子句.
  • - +
  • 并不支持 COPY TO 和 APPEND FROM 的所有变化,例如复制到 excel 和 sylk。
  • COPY TO 命令中的 Database 和 name 子句以及 CodePage 子句暂时被忽略
  • 生成系统 - +
  • 我们已准备好 X# 生成系统,以便与 .Net 5 和 .Net Core 使用的 SDK 类型项目配合使用。请参阅下面的主题,了解这对项目文件意味着什么。
  • 请注意,由于在 Visual Studio 之外运行的自动生成也需要生成系统,因此生成系统的源代码已移至 GitHub 上的编译器资源库。
  • 项目文件的更改 - +
  • 现在,我们不再将 MSBuild 支持分别部署到每个 VS 版本内的文件夹中,而是将其一次性部署到 XSharp 安装文件夹内的文件夹中。
    安装程序会设置一个指向该文件夹的环境变量XSharpMsBuildDir。因此,当使用该版本的 X# 打开时,所有项目文件都将得到更新。
  • - +
  • 我们所做的更改是将宏“$(MSBuildExtensionsPath)\XSharp ”替换为“$(XSharpMsBuildDir)”,后者是一个环境变量,指向机器上 X# MsBuild 支持文件的位置。如果在生成服务器上运行 X#,则可以在需要时在生成脚本中设置该环境变量。
  • 安装程序会自动添加该环境变量,并将其指向 <XSharpDir>\MsBuild 文件夹。
  • Changes in 2.5.2.0 (Cahors) 编译器 - +
  • 如果定义中的表达式包含值大于 127 的 _Chr()函数,则会生成警告,提示开发机器和最终用户机器之间可能存在代码页差异。
  • 修复了一个问题,其中一个宏定义被定义为 PTR(_CAST,0),并且这个宏定义也被用作函数/方法的默认值。
  • 运行时 - +
  • 在 NULL_OBJECT 上调用 IsAccess、IsAssign 和类似方法会导致异常。这一问题已得到修复。
  • EmptyUsual 现在也适用于 OBJECT 类型
  • 当浮点数除法返回无限值时,不会产生除以零的异常。这一问题已得到修复。
  • @@ -2579,15 +2598,15 @@
  • 传递给 NoIVarGet() 和 NoVarPut() 的变量名现在转换为大写字母。
  • RDD 系统 - +
  • 修正了当作用域降序 Cdx 位于 Eof() 时向前跳转的问题
  • VOSDK - +
  • 有几个 DbServer 方法在选择正确的工作区之前调用一个方法来写入更改。这是一个源于 VO 的老漏洞,现已得到修复。
  • Visual Studio 集成 - +
  • 在 VS 2019 中查找 XML 文档有时不起作用。这一问题已得到修复。
  • 现在,ClassView 和 Objectview 可以 “在一定程度上 ”工作。这一点需要改进。
  • 改进了所谓 “主要互操作程序集 ”的加载
  • @@ -2597,22 +2616,22 @@
  • VO 窗口编辑器(以及其他 VO 编辑器)的属性窗口和工具箱的位置和大小现在可以在 Visual Studio 会话之间保存。
  • 生成系统 - +
  • 生成的 XML 文件是在项目文件夹中而不是在中间文件夹中生成的。这一问题已得到修复。
  • 文档 - +
  • 大多数主题的 [Source] 链接丢失。现已修复。
  • 更正了一些文档
  • Changes in 2.5.1.0 (Cahors) 编译器 - +
  • 此版本中的编译器没有变化(仍称为 2.5.0.0)
  • 运行时 - +
  • (VO 兼容性)修正了数组的 VO 兼容性问题。现在,使用 2 维索引访问单维数组将返回 NIL,且不会产生异常。这是一个愚蠢但兼容的问题。
  • (VO 兼容性)用符号比较一个带数值的常量不再产生异常。数值现在被转换为符号,并使用该符号进行比较。
  • (XPP 兼容)不允许使用索引操作符(u[1])访问包含 LONG 的 USUAL 变量。这将返回 TRUE 或 FALSE,是检查位是否被设置的一种简单方法。
  • @@ -2620,7 +2639,7 @@
  • 为支持延迟绑定添加了一些优化代码
  • Visual Studio 集成 - +
  • 如果外部程序集包含两种类型,而这两种类型的名称只是大小写不同,则读取外部程序集的类型信息将失败。
  • 实体解析器无法识别前缀为可见性修饰符(PROTECTED SET)的 GET 和 SET 访问器
  • 实体解析器无法识别不以 MEMBER 关键字开头的 ENUM 成员
  • @@ -2629,20 +2648,20 @@
  • 修正了 VS 调试器中的一个问题,即在数组和集合的索引操作符中减去 1。这显然是不正确的。
  • 生成系统 - +
  • 生成的 XML 文件的文件名来自项目文件名而非输出程序集名。这一问题已得到修复。
  • Changes in 2.5.0.0 (Cahors) 编译器 - +
  • 如果 #pragma 行后面跟着不正确的语法,就会 “吃掉 ”不正确的语法,导致整个方法被排除在编译之外。这一问题已得到修复。
  • 带有 VOID 返回类型的方法/函数中的多行编译时代码块未被正确编译。这一问题已得到修复。
  • 编译器现在允许在代码块中为参数指定类型。由于代码块定义需要类型为 USUAL 的参数,这将被编译器转换。参数仍将是类型为 USUAL,但在代码块内部将分配适当类型的本地变量。因此,现在可以编译这段代码。
  •   { | s as string, i as int| s:SubString(i,1) } - +
  • 代码填充缺失参数时,在传递参数给 COM 调用(Peter Monadjemi 的 Word 示例)时出现问题。
  • 修正了向接受对象的函数传递 IntPtr、VOSTRUCT 地址的类型指针的问题。
  • 我们添加了向 PSZ 添加一个整数值的代码,这样就产生了一个新的 PSZ,它从原始 PSZ 中的一个相对位置开始。不会分配新的缓冲区。
  • @@ -2655,14 +2674,14 @@
  • 现在,编译器允许通过编写双引号在字符串中嵌入引号。这样就可以了:
  • ? "Some String that has an embedded "" character" - +
  • 当您声明一个与函数同名的 MEMVAR 时,编译器将不再有任何问题来解析函数调用。请注意,您必须声明 memvar 才能使该解析生效。
    例如:

  • FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // 赋值给内存变量
    Test(Test)      // 用 “Test ”的值调用 “Test ”函数
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    公共运行时 - +
  • Workareas 类不再使用包含 4096 个元素的数组,而是使用字典来保存打开的 RDD。这减少了运行时状态所使用的内存。
  • 修复了 WrapperRDD 类中的一个问题
  • OrdSetFocus() 现在以 STRING 返回上一个活动标记
  • @@ -2686,11 +2705,11 @@
  • 现在,当在 Windows 上运行时,OS() 函数会返回更合适的版本描述。它从注册表中读取版本名称,并在版本中包含 x86 和 x64 标志。
  • RDD 系统 - +
  • 在共享模式下写入记录时,DBF RDD Now 会强制刷新磁盘。
  • 修复了 DBFCDX rdd 中一个可能损坏索引的问题。
  • 我们在 DBFCDX RDD 中内置了一个验证例程,用于验证当前标志的完整性。要调用该例程,请使用 DBOI_VALIDATE 常量调用 DbOrderInfo。
    这样就可以验证:
  • - +
  • 如果所有记录在索引中都恰好包含一次
  • 如果索引中每条记录的值都是正确的
  • 如果页面中索引键的 order 正确
  • @@ -2698,33 +2717,33 @@
    如果发现问题,该调用将返回 FALSE,并写入一个文件,文件名为 <BagName>_<TagName>.ERR,其中包含所发现错误的描述。 - +
  • Workarea 类(XSharp.Core 内)和其他 RDD 类中的大部分导出变量已更改为 PROTECTED。
    我们还为需要从 RDD 外部访问的变量添加了一些属性
  • 修正了从范围 CDX 索引中的 BOF 位置反复跳回时出现的问题。
  • DBFCDX 的 Zap() 操作没有清除一个内部缓存。这一问题已得到修复。
  • DBFCDX 驱动程序现在可以在 CDX 文件中的最后一个标记被删除后关闭并删除该文件。
  • 宏编译器 - +
  • 宏编译器无法将 0000.00.00 识别为空日期。现已修复。
  • 现在,宏编译器也能像普通编译器一样在标识符中使用异国字符。我们添加了与 C# 编译器相同的标识符名称规则。
  • XBase++ 函数 - +
  • 修正了 XPP 函数 SetCollationTable() 中的一个问题
  • DbCargo() 现在还可以将工作区 cargo 值设置为 NULL 或 NIL
  • 我们添加了几个函数,如 PosUpper()、PosLower()、PosIns() 和 PosDel()。
  • VFP 函数 - +
  • 为 FoxPro 添加了 AllTrim()、RTrim()、LTrim() 和 Trim() 变体(感谢 Antonio)
  • 已添加 StrToFile() 和 FileToStr() (感谢 Antonio 和 Karl Heinz)
  • VOSDK - +
  • 我们在 CSession 和 CSocket 类上创建了一个 Destroy() 方法,这样就可以 “清理 ”对象(在 VO 中可以调用 Axit(),但现在已经不允许了)。这些类的反构造函数也将调用 Destroy()。
  • 修正了 TreeView:GetItemAttributes 中的一个问题。现在也可以使用 hItem 调用该属性(这在 TreeViewSelectionEvent:NewTreeViewItem 中发生)。
  • OpenDialog 类现在可以调整大小。
  • @@ -2735,7 +2754,7 @@
    Visual Studio 集成 代码模式 - +
  • 我们完全重写了后台解析器和代码模型,它用于解析 VS 编辑器中的 “实体”,并用于生成 VS 解决方案中类型、方法、函数等的内存模型。该解析器现在使用与编译器相同的词法,但实体是用手写解析器收集的(因为编辑器缓冲区中的代码可能包含不完整的代码,我们无法可靠地使用普通解析器)。
  • 我们现在使用 SQLite 数据库在会话之间持久保存代码模型。这减少了 X# 项目系统所需的内存。我们不再将整个代码模型保存在内存中。
  • 这也意味着,当您重新打开现有解决方案时,我们只需解析自上次处理以来已更改的文件。这将加快大型 VS 解决方案的加载速度。
  • @@ -2744,7 +2763,7 @@
    源代码编辑器 - +
  • 修正了当光标位于第一个实体之前的一行代码中时,编辑器上方下拉组合框的一个问题。
  • 修正了一个问题,即在类声明之后,编辑器中的函数没有可折叠区域
  • 现在,编辑器内的代码自动补全功能不仅能获取类型本身的扩展方法,还能获取由这些类型实现的接口的扩展方法。
  • @@ -2753,21 +2772,21 @@
  • 修正了 “重新格式化 ”代码中的几个问题
  • Windows 窗体编辑器 - +
  • Windows 窗体使用的类内对字段的某些内联赋值可能导致窗体编辑器无法使用窗体。这一问题已得到修复。
  • Windows 窗体编辑器有时会删除实体之间的空行。这一问题已得到修复。
  • Windows 窗体编辑器解析的代码中的用户自定义命令在窗体更改和保存时无法识别并消失。这一问题已得到修复。
  • 修正了使用项目资源文件中存储的资源(在源代码中以 “global:: ”为前缀)设置图像和类似属性的问题
  • VOXporter - +
  • 我们添加了将 AEF 中的 VO 表格导出为 XML 格式的支持
  • 我们添加了将 AEF 中的 VO 菜单导出为 XML 格式的支持
  • Changes in 2.4.1.0 (Bandol GA 2.4a) 编译器 - +
  • Core 方言现在不再支持括号字符串,以避免在 GET 和 SET 关键字之间包含属性的单行外部特性(attributes)声明出现问题
  • 在 EXTERN 修饰符之后,PROPERTY 关键字不能被正确识别。
  • 修正了包含 2 个数字常量的 IIF 表达式的 XS9021 警告
  • @@ -2775,7 +2794,7 @@
  • 我们添加了一个新的编译器选项 -fox2 。该选项可使宏编译器看到局部变量,在使用内嵌参数的 SQL 语句时也应使用该选项。该编译器选项必须与 -memvar 和 FoxPro 方言结合使用。
  • 运行时 - +
  • 修正了在使用 DbServer:AppendDelimited() 和 DbServer:CopyDelimited() 时 DELIM Rdd 中出现的问题。
  • 修正了 DbSetOrder() 在未找到 order 时仍返回 TRUE 的问题。
  • 修正了 File() 函数在使用通配符时返回 FALSE 的问题
  • @@ -2792,11 +2811,11 @@
  • 当方法返回 NULL_STRING 且返回类型为 STRING 时,IVarGet() 和 Send() 现在会返回空字符串
  • RDD - +
  • 获取范围索引的 OrdKeyNo 会将索引位置重置为索引顶部。这会影响浏览器中作用域索引的滚动条
  • VOSDK - +
  • 控制台类程序集现已标记为 AnyCpu。
  • 修正了上一个版本中引入的一个问题,即从 Shell32.DLL 导入的某些函数(如拖放支持)的调用约定。
  • 修复了在远程桌面上运行时,PrintingDevice 构造函数中读取打印机的问题
  • @@ -2805,7 +2824,7 @@
  • 改进 DataBrowser 类的 “column scatter” 代码
  • Visual Studio 集成 - +
  • 如果您从 XSharp 编辑器选项中的 “提交完成列表 ”控件中删除了所有字符,那么重启 VS 后,所有默认字符都会出现。现在我们会记住你已经清除了列表,并且不会再重新填充列表。
  • 修正了一个问题,该问题导致编辑器无法重新扫描当前缓冲区中已更改的实体
  • 为新的 -fox2 编译器选项添加了项目属性
  • @@ -2817,7 +2836,7 @@ Changes in 2.4.0.0 (Bandol GA 2.4) 编译器 - +
  • 修正了某些整数运算仍会返回错误变量类型的问题
  • 无符号整数类型(BYTE、WORD、DWORD、UINT64)的一元减运算符返回的类型与原始类型相同,因此不会返回负值。这种情况已得到改变。现在,该运算符的返回值是下一个较大的有符号整数类型。
  • 在插值字符串中使用编译器宏(如 __VERSION__ )会导致编译器出现内部错误。这一问题已得到修复。
  • @@ -2825,7 +2844,7 @@
  • 现在还能识别 RETURN 和 GET 关键字后的括号字符串。
  • 运行时 - +
  • 修正了从日期减去 dword 时出现的问题(与编译器中的有符号/无符号问题有关)
  • LUpdate() 现在会在工作区没有打开表时返回 NULL_DATE。
  • 已添加缺失的 ErrorStack() 函数(感谢 Leonid)
  • @@ -2841,7 +2860,7 @@
  • 修正了 FLOAT->STRING 转换时与 VO 的若干不兼容问题
  • RDD 系统 - +
  • 修复了在 DBFCDX 表中向后跳过作用域的问题
  • 修复了使用 DBFCDX 和 DBFNTX 驱动程序创建唯一索引的问题
  • 现在始终支持向 DBF 列写入 NULL 值。如果列是 DBFVFP 表中的可为 NULL 值的列,则会设置 null 标志。对于其他 RDD,NULL 值将被写为空值。
  • @@ -2854,31 +2873,31 @@
    RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // 这使用了 DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.csv")             // 这将使用 CSV RDD

    RuntimeState.DelimRDD := "TSV"              // 告诉运行时使用 TSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.tsv")             // 使用 TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔读取
    DbAppDelim("C:\test\test.csv")              // 这将使用 CSV RDD
    VO SDK - +
  • PrintingDevice:Init() 不再尝试从 win.ini 中读取默认打印机,而是从注册表中读取默认打印机。
  • 更新了代码仍在访问 win.ini(使用 GetProfile..() 函数)的其他几个位置。
  • GUI 类延迟加载对普通对话框 DLL 和 winspool.drv 的多次调用。现在情况有所改变,因为在 .Net 中不再需要这些调用。
  • 清理了 GUI 类中的所有 PSZ(_CAST 操作。
  • Visual Studio 集成 - +
  • OUT 变量的参数提示显示为 REF
  • 未找到带有 REF 或 OUT 参数的成员的 XML 说明
  • 修复了 VS 编辑器中的一个异常
  • VOXporter - +
  • 此版本无任何更改
  • Changes in 2.3.2 (Bandol GA 2.3b) 编译器 - +
  • 已添加对括号字符串的支持([包含引号的字符串:''和' ] )
  • 已添加对使用 &Id 和 &Id.Suffix 符号的 PRIVATE/PUBLIC 语法的支持
  • 以前创建 EXE 文件时没有清单,除非您使用的是有清单的 WIN32 资源。现在,当没有提供清单时,该清单会正确添加到 EXE 文件中。
  • 与版本资源和清单相关的非托管资源的处理方式发生了变化:
  • - +
  • 编译器检测本地资源时,现在会检查是否包含版本和/或清单资源。
  • 如果没有清单资源,则会将默认清单资源添加到 Win32 资源文件的资源中。
  • 当存在版本资源时,该版本资源将被编译器根据 Assembly 属性生成的版本资源所取代。
  • @@ -2886,18 +2905,18 @@
  • 当然,我们添加了一个命令行选项来抑制这种情况:如果使用命令行选项 "-usenativeversion" ,则将使用 Win32 资源中包含的本地版本。如果 Win32 资源文件中没有包含版本资源,则该命令行选项将被忽略。
  • - +
  • ACCESS/ASSIGN 方法中现在支持 PCOUNT() 和 ARGCOUNT()。可以传递的参数数量仍然是固定的,但这两个函数现在将返回在 ACCESS 和/或 ASSIGN 方法中定义的参数数量。
  • 我们修正了编译器错误 “Failed to emit module”,而不是显示代码中真正问题(类型缺失)的问题。
  • 预处理器中的扩展匹配标记,如 USE udc 中的 <(file)> 现在也能正确匹配文件名。
  • 改进了区分括号表达式和类型转换的检测算法。这种算法现在是
  • - +
  • 括号之间的内置类型名称总是被视为类型转换。例如 (DWORD)、(SHORT) 等。
  • 括号之间的其他类型名称可能被视为类型转换,但也可能被视为括号表达式。这取决于括号后面的标记。如果该标记是运算符,如 +、-、/ 或 *,则视为括号表达式。如果结尾括号后的标记是开头括号,则表达式被视为类型化表达式。举例如下
  • ? (DWORD) +42       // 这是一种类型转换
    ? (System.UInt32) +42   // 这是一个括号表达式,无法编译
    ? (System.UInt32) 42    // 这是一个类型转换,因为在 42 之前没有运算符
    ? (System.UInt32) (+42) // 这是一个类型转换,因为 +42 位于括号之间
    - +
  • 调用 Axit() 方法的代码现在会产生编译器错误。
  • 我们使用了 /vo11 编译器选项
  • 我们更正了几个已签名/未签名警告
  • @@ -2905,7 +2924,7 @@
  • 词典现在可以识别(在 FoxPro 方言中)For() 和 Field() 函数,您不再需要在这些函数前添加 @@。
  • 运行时 - +
  • 修正 StrZero() 的负值问题
  • 修复 IsSpace() 在字符串为空或 null 时崩溃的问题
  • VFP 方言中的 AFill() 现在也能填充子数组中的元素(适用于多维数组)
  • @@ -2926,18 +2945,18 @@
  • 我们为 FoxPro 特有属性添加了 DBOI_COLLATION 和 DBS_CAPTION。
  • VO SDK - +
  • 我们已从图形用户界面类源代码中删除了版本信息资源。现在,版本信息由程序集属性生成
  • 我们已清理了代码,并从抑制警告中删除了警告 9020 和 9021,因为编译器现在可以正确处理这些警告。
  • RDD 系统 - +
  • 当 DBC 文件被他人独占时,DBFVP 驱动程序不再无法打开 DBF
  • 已添加对使用 DBS_CAPTION 读取标题和使用 DBOI_COLLATION 读取 collations 的支持
  • DBFNTX 驱动程序在创建新索引时未正确设置 HPLocking 标志
  • Visual Studio 集成 - +
  • 使用 VAR 关键字声明的变量的类型查找有时会陷入无限循环。这一问题已得到修复。
  • 现在只有选中常规编辑器选项中的 “隐藏高级成员 ”复选框时,以“__”开头的成员才会从完成列表中隐藏。
  • 已添加对 BRACKETED_STRING 常量着色的支持
  • @@ -2947,18 +2966,18 @@
  • 现在,您可以在项目属性对话框中启用/禁用  /vo11
  • VOXporter - +
  • 从剪贴板内容移植时,现在 VOXporter 会将修改后的代码放回剪贴板
  • 添加了移除 ~ONLYEARLY 实用程序的选项
  • 安装 - +
  • 安装程序现在有了一个新的命令行参数“-nouninstall”,可以防止自动安装以前的版本。这样就可以同时安装多个版本的 X#。
    请注意,安装程序会将注册表键值设置为上次安装 X# 的位置。Visual Studio 集成将使用该位置来定位编译器。
    如果不更改,所有 VS 安装将始终使用上次安装的 X# 版本。有关该机制如何工作的信息,请参阅 VS 和 MsBuild 的生成过程
    此外,如果您选择在 GAC 中安装 X# 运行时程序集,那么这些运行时 DLL 的较新版本将/可能会覆盖旧版本。这取决于较新的 DLL 是否有新的程序集版本。
    目前,所有 X# 运行时动态链接库(仍然)都是 2.1.0.0 版本,即使 X# 本身现在是 2.3.2 版本。
  • 安装程序现在会列出所有找到的 VS 2017 和 VS 2019 实例,包括 Visual Studio Buildtools,因此您可以选择在这些版本的 Visual Studio 的特定实例中安装,或者直接在所有实例中安装。
    请注意,在使用 -nouninstall 命令行选项运行 X# 时,安装程序将无法将 X# 从之前安装过它的 VS 安装中移除。
  • 我们在帮助文件中添加了一些关于所有安装程序命令行选项的 文档 。
  • 文档 - +
  • 修正了转义码文档中的错误
  • 我们添加了一个提示和技巧章节,目前包含以下主题。
  • 添加了对安装程序的说明 命令行选项
  • @@ -2971,42 +2990,42 @@ Changes in 2.3.1.0 (Bandol GA 2.3a) 编译器 - +
  • 在大小写敏感模式下编译时,编译器现在会检查子类声明的方法是否与父类中的方法只有大小写上的区别
  • - +
  • 关于向 foreach iterator 变量赋值的警告信息已从 “无法赋值 ”更改为 “不应赋值”。
  • #pragma warnings 无法使用 xs1234 语法,只能使用数字。现已更正
  • 运行时 - +
  • 为 IRdd 接口添加了 SetFieldExtent 方法
  • USUAL 类型不再 “缓存 ”方言设置
  • 修正了 ACopy() 在跳过参数或负参数时的一些问题。
  • Alias() 的返回值现在使用大写字母。
  • VO SDK - +
  • VO SDK Console 类现在内部使用 System.Console 类。唯一不再可用的功能是
  • - +
  • 它不再响应鼠标
  • 不支持创建 “新 ”控制台窗口。
  • RDD 系统 - +
  • 修正了 Advantage RDDs 中的一个问题,该问题是由大小写问题引起的(子类中的方法与试图覆盖的父类中的方法的大小写不同)。因此,我们还在编译器中添加了一项检查。
  • 在某些情况下,使用 DBFNTX 驱动程序创建 NTX 可能会因时间问题而失败。这一问题已得到修复。
  • Visual Studio 集成 - +
  • 修正了关键字大小写同步中可能损坏编辑器内容的问题。
  • Changes in 2.3.0.0 (Bandol GA 2.3) 编译器 - +
  • 源文件中的语法错误 (1003) 或解析器错误 (9002) 可能导致错误列表中出现多个错误。现在我们只报告源文件中这些错误类型中的第一个。
  • 启用 -cs(大小写敏感标识符)编译器选项
  • 编译器现在会将编译时代码块的源代码作为字符串包含在该代码块中。在编译时代码块上调用 ToString() 将获取该字符串。
  • @@ -3022,7 +3041,7 @@
  • 已添加对 #pragma options 的支持。参见 #pragma options
  • 运行时 - +
  • 添加了 XSharp.Data.DLL,其中包含 RDD 系统使用的基于 .Net SQL 的数据访问支持代码和新的 Unicode SQL 类。
  • 当未传递 FOR 块或 WHILE 块时,DbEval() 引发异常
  • 当求值块不返回逻辑表达式时,DbEval() 引发异常
  • @@ -3032,7 +3051,7 @@
  • 添加了将 STRING 类型的 USUAL 值转换为 STRING 的修复。
  • 修正了当区域为 “NIL ”或 “M ”时,__FIeldSetWa() 中的一个问题。
  • - +
  • 添加了 FoxPro CURRENCY 类型。USUAL 变量也支持这种类型。在内部,CURRENCY 变量的值存储为十进制,但四舍五入到小数点后 4 位。
  • 大多数运行时 DLL 现在都以大小写敏感模式编译。
  • 修正了 STOD() 函数中的一个问题,允许字符串长度超过 8 个字符。
  • @@ -3041,13 +3060,13 @@
  • 修正了 ACopy()、Transform() 和 Str() 中的问题
  • VOSDK 类 - +
  • 新增了 DbServer:FieldGetBytes() 和 DbServer:FieldPutBytes() 以读取字符串字段的 “原始 ”字节。请注意(在 ccOptimistic 模式下)字节值不会被缓存,调用 FieldPutBytes() 时必须手动锁定和解锁服务。
  • 添加了几个缺失的定义
  • 将 VO SDK 同步到 VO 2.8 SP4 SDK。唯一未包含的更改是 DateTimePicker 类中的更改。这些更改导致了与 X# VOSDK 中现有代码的冲突。
  • RDD 系统 - +
  • Advantage RDD 的标题大小会导致异常。现已修复
  • 修正了 DbRlockList() 和 advantage RDD 的一个问题
  • 在 Advantage RDD 的 cursor 中跳转不会刷新相关表的 EOF 和 BOF 标志
  • @@ -3060,66 +3079,66 @@
  • DBFCDX RDD 现在可以实现 BLOB_GET、BlobExport() 和 BlobImport() 。
  • Pack、Zap 或重建带有自定义或唯一标记的 CDX 索引时,将无法保留这些标记。这一问题已得到修复。
  • 使用 DBFVFP 驱动程序创建文件时,现在可以在 DbCreate() 数组的字段类型中包含字段标记,方法是在类型后面加上冒号和一个或多个标记,其中标记为以下其中之一:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (不受 FoxPro 支持)
    其他标记也可能随之出现(例如,Harbour 也有 E = 加密和 C = 压缩标记)
    注意:
  • - +
  • 请注意,字段的大小是字节数,因此{“NAME”, “C:U”,20,0}声明了一个包含 10 个 Unicode 字符和 20 个字节的 Unicode 字符字段。
  • 我们不验证标志的组合。例如,AutoIncrement 只适用于 Integer 类型的字段。
  • - +
  • 除 DBFVFP 驱动程序外,所有 RDD 的 DbFieldInfo(DBS_PROPERTIES) 都返回 5。该驱动程序返回 6 个属性。第 6 个属性是 FLAGS 字段。该字段是 DBFFieldFlags 枚举值的组合。
  • 修正了 Advantage RDD 的 AppendDb() 和 CopyDb() 的一个问题
  • 修正了 DBF RDD 的 Append() 代码中的一个问题。当调用 Append() 时没有写入数据,那么写入磁盘的记录可能会损坏。现在,Append() 方法可直接写入带空白的新记录。
  • 现在,XSharp.RDD.DLL 中 Advantage RDD 的完全限定名称与 Vulcan 的 AdvantageRDD.DLL 中的完全限定名称相同。
  • - +
  • 我们在通知中添加了 FileCommit 事件。该事件会在工作区提交时发送。
  • 宏编译器 - +
  • 宏编译器现在还能识别 Array()、Date() 和 DateTime() 函数。
  • 修正了别名表达式的问题
  • 在宏编译器希望使用单一表达式的地方,现在也可以在括号之间使用表达式列表。列表中的最后一个表达式被视为表达式列表的返回值
  • Visual Studio 集成 - +
  • 在 VS 项目系统中启用了编译时区分大小写的选项
  • - +
  • "格式化文档"的速度有了很大提高。
  • 现在,“工具/选项 ”中的 XSharp intellisense 选项页面在需要时会显示滚动条。
  • VO 窗口编辑器中的工具调色板现在有了图标
  • - +
  • 我们为 VO MDI 窗口和 VO SDI 窗口添加了模板。
  • 生成系统 - +
  • 在编译本地资源时,资源编译器会自动包含一个包含某些定义(如 VS_VERSION_INFO)的文件。
  • 调试器 - +
  • 在调试器中输入观察表达式或断点条件时,现在可以使用基于 1 的数组索引。现在,我们的调试器在计算表达式时会自动减去 1。
  • VOXporter - +
  • 修正了 Windows 窗体代码生成中的一个问题
  • - +
  • 现在,您还可以从剪贴板导出单个 MEF 文件、单个 PRG 文件和数据。
  • VOXPorter 不会触及 #ifdef ... #endif 之间的代码
  • Changes in 2.2.1.0 (Bandol GA 2.2a) 编译器 - +
  • 在编译包含赋值而非 access 的代码时,尝试读取 access 可能会导致编译器异常。这一问题已得到修复。
  • 运行时 - +
  • 添加了一个缺失的 _Run() 函数
  • Visual Studio 集成 / 生成系统 - +
  • 修正了一个问题,该问题会导致对话框显示“‘XSharp 项目系统’软件包未正确加载 ”的信息。
  • 修正了当源文件名称包含带重音的 ASCII 字符或其他大于 128 的字符时,为资源编译器写响应文件的问题。尽管问题已经解决,但我们仍建议不要对文件名进行过多处理,因为这些文件名必须从 Unicode 转换为 Ansi 格式,因为资源编译器只能读取 Ansi 格式的响应文件。
  • 修正了某些 快速信息/工具提示 窗口的问题
  • @@ -3128,14 +3147,14 @@
  • 观察窗口、断点条件等中的表达式现在可以包含 SELF、SUPER 和冒号分隔符。遗憾的是,它们仍然区分大小写。
  • VOXPorter - +
  • 我们现在可以检测到一个类的字段名和 accesses/assigns 是否相同。这在 VO 中是允许的,但在 .Net 中不再允许。在类中,字段名将以下划线作为前缀。
  • 现在,我们在 “Trace ”名称前加上 @@,因为这通常用于在 VS 中有条件地编译跟踪代码。
  • Changes in 2.2.0.0 (Bandol GA 2.2) 编译器 - +
  • 编译器现在可以识别函数 Date()、DateTime() 和 Array(),即使它们的名称与类型名称相同。
    `Date()`带有一个参数仍然会被视为将该参数转换为`Date()`,就像下面的例子中一样。
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // 这仍然是从 Date 到 DWORD 的转换
    然而,当调用带有 0 个或 3 个参数的 Date 时,要么返回当前日期(如 Today()),要么根据 3 个参数构造一个日期(如 ConDate())。
    DateTime() 函数接受 3 个或更多参数并构造一个 DateTime() 值。
    Array() 函数的参数与 ArrayNew() 函数相同。
  • 在为 String.Format() 选择重载且通常表达式作为第一引用传递时,我们不再允许编译器选择期望 IFormatProvider 接口的重载之一。
  • 通过引用传递给未类型化方法/函数的参数现在已设置了 IsByRef 标志。您可以通过 IsByRef(uParameter) 检查参数来查询 “By Reference ”参数。请注意,为参数赋值后,该标记将被清除。
  • @@ -3144,12 +3163,12 @@
    宏编译器 - +
  • 宏编译器现在可以识别并编译嵌套代码块,例如
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb 现在将包含 {||SomeFunc()}
    ? Eval(cb)
  • 在 FoxPro 方言中,宏编译器现在可将 AND、OR、NOT 和 XOR 识别为逻辑运算符
  • 运行时 - +
  • 添加了一些 Xbase++ 兼容函数,如 DbCargo()、DbDescend() 和 DbSetDescend()。
  • DateCountry 枚举现在还有 System 和 Windows 值,它们都从系统中的区域设置读取日期格式。
  • 我们添加了一个 WrapperRDD 类,您可以继承该类。这样,您就可以封装现有的 RDD,并根据自己的选择对方法进行子类化。有关示例,请参阅 WrapperRDD 文档。
  • @@ -3163,7 +3182,7 @@
    RDD 系统 - +
  • 修复了 DBFCDX RDD 中的锁定问题,该问题会在打开多个应用程序之间以及多个线程之间共享的文件时造成问题。现在,RDD 可以正确检测 CDX 是否被其他进程或线程更新。
  • 修复了运行多个线程时文件 IO 系统的一个问题
  • 修正了运行多个线程时 File() 和 FPathName() 函数的一个问题
  • @@ -3173,11 +3192,11 @@
  • 修复 DBF RDD EOF 时的读取错误。
  • VOSDK - +
  • 修复了在应用程序关闭时调用已关闭服务器的 DbServer 析构函数时出现的问题。
  • Visual Studio 集成 - +
  • 在一位用户的帮助下,修复了 “括号匹配 ”代码中的速度问题(感谢 Fergus!)。
  • 调试器运行时,您将无法再编辑源代码。
  • 我们在项目属性的生成选项中添加了 “注册 COM Interop ”属性。
  • @@ -3194,18 +3213,18 @@
  • Windows 窗体、设置和资源的代码生成器现在尊重 “工具”-“选项 ”TextEditor/XSharp 页面中的关键字大小写设置。
  • VOXPorter - +
  • 以反斜线结尾的文件夹名称可能会混淆 VOXPorter
  • Changes in 2.1.1.0 (Bandol GA 2.11) 编译器 - +
  • 我们为 OUT 参数添加了新语法。现在您可以使用以下语法之一

  •   LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // 这将以内联方式声明 out 变量,其类型来自方法调用
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // 这将声明内联 out 变量,类型由我们指定
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // 这将告诉编译器生成一个 out 变量,我们对结果并不感兴趣。
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // 会告诉编译器生成一个 out 变量,但我们对结果并不感兴趣。
    // 名称“_”的特殊含义是 “忽略此内容”。
         ? "Parsing succeeded"
      ENDIF
    - +
  • 编译器现在允许使用 Date()、DateTime() 和 Array() 函数名。运行时具有这些函数(见下文)
  • 修正了一个预处理器问题,即当 .not. 或 ! 操作符位于 .AND. 或 .OR. 等逻辑操作符之后时,UDC 内的 <token> 匹配标记会停止匹配标记。
  • 已添加对 <usualValue> IS <SomeType> 的支持。编译器会自动提取 USUAL 的内容并将其封装在一个对象中,然后应用正常的 IS <SomeType> 操作。
  • @@ -3216,7 +3235,7 @@   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    您也可以使用 M 前缀来表示局部变量或内存变量。编译器会首先尝试将变量解析为局部变量,如果失败,则会尝试将变量解析为内存变量(启用动态内存变量时)。 运行时 - +
  • 我们为 FoxPro cursor 访问语法添加了支持功能。
  • 在 Vulcan 方言中,NoMethod() 方法现在接收方法名作为第一个参数(这与 VO 不兼容)
  • 新增了函数 Date()(可有 0 或 3 个参数,相当于 Today() 和 ConDate())、DateTime() 和 Array()。
  • @@ -3225,7 +3244,7 @@
    RDD - +
  • 从 DBF 中读取负数时出现问题。现已修复
  • 修正了 FPT 驱动程序在 FPT 文件中写入长度为 0 字节的数据块时出现的异常。
  • DBF() 函数在 FoxPro 方言中返回完整文件名,在其他方言中返回别名。
  • @@ -3234,7 +3253,7 @@ Changes in 2.1.0.0 (Bandol GA 2.1) 编译器 - +
  • 我们为函数和方法调用中的未类型化参数添加了对引用参数的支持
  • 在 Xbase++ 和 FoxPro 方言中,用“@”传递的参数总是被视为 BY REF 参数,因为这些方言不支持 “AddressOf” 功能。
  • 当使用 /undeclared 时,如果实体添加了一个新的 private 属性,那么当实体退出作用域时,该 private 属性不会被清除。这一问题已得到修复。
  • @@ -3245,7 +3264,7 @@
  • 我们新增了对多条 SET 命令的支持,如 SET DEFAULT、SET PATH、SET DATE 和 SET EXACT 等。
  • 运行时 - +
  • 我们做了一些更改,以使 XSharp.Core 能够在 Linux 上运行
  • 我们修复了日期类型减法运算符中的一个问题。这改变了减法运算符的签名,迫使我们增加了运行时的 Assemblyversion。
  • Xbase++ 方言现在允许在常量内的字符串上使用 [] 操作符。它会返回给定位置上一个字符的子串。
  • @@ -3264,7 +3283,7 @@
  • DateCountry 设置现在包括一个系统设置,它将从当前文化的设置中读取日期格式。
  • 宏编译器 - +
  • 宏编译器检测到不明确的方法或构造函数时,会在错误信息中包含这些方法或构造函数的签名。
  • 我们添加了一个新的 IMacroCompiler2 接口,它增加了一个额外的属性 “Resolver”。该属性可接收一个 “MacroCompilerResolveAmbiguousMatch ”类型的委托。该委托的原型如下:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • 当宏编译器检测到模棱两可的匹配时,将调用该委托,并接收可能候选的 System.Reflection.MemberInfo 和检测到的参数类型数组(编译时检测到)。委托可以返回 1 或 2,以便在任一候选变量中做出选择。任何其他值都意味着委托不知道要选择哪个模棱两可的成员。
    如果宏编译器发现有 2 个以上的备选方案,它会首先调用备选方案 1 和 2 的委托,然后再调用从备选方案 2 和备选方案 3 中选出的委托,等等。
  • @@ -3276,13 +3295,13 @@
  • 宏编译代码块的 PCount() 总是返回 1。这一问题已得到修复。
  • VOSDK - +
  • 修正了代码中未关闭的 DbServer 对象的问题。
    现有代码试图通过析构函数关闭工作区。但在 .Net 中,析构函数在一个单独的线程中运行,而在该 GC 线程中没有打开的文件...
  • 删除了对 DbfDebug() 的不必要调用
  • AdsSqlServer 类现已添加到 VORDDClasses 程序集中
  • RDD - +
  • 我们更正了一个关于解析错误或空日期的问题
  • 我们更正了在 Advantage RDD 中读取日期时可能导致堆错误的问题。
  • 我们为 Advantage 支持添加了几个 “缺失 ”功能,这些功能在 VO 的 “Ace.Aef ”中已有
  • @@ -3298,7 +3317,7 @@
  • Visual Studio 集成 - +
  • 修复了 WCF Service 模板
  • 我们已将项目系统迁移到异步 API。这将使包含大量 X# 项目的解决方案的加载速度更快一些。
  • 修正了关键字大小写同步中可能导致用户界面锁定数秒的问题
  • @@ -3308,7 +3327,7 @@
  • 我们改进了 X# 项目之间的类型查找。
  • VOXPorter - +
  • 现在还可导出 DbServer 和 FieldSpec 实体
  • VOXPorter 现在还能生成一个单独的项目/应用程序,其中包含 VO 应用程序中 VO 图形用户界面窗口的 Windows 窗体版本。
  • 运行 VOXPorter 时,您现在可以选择导出到 XIDE、Visual Studio 或两者。
  • @@ -3316,7 +3335,7 @@ Changes in 2.0.8.1 (Bandol GA 2.08a) 编译器 - +
  • 修正了预处理器中的递归问题
  • 不再能正确检测 MEMVAR-> 和 FIELD-> 现已修复。
  • 我们更正了 dbcmd.xh 中的几个问题
  • @@ -3324,12 +3343,12 @@
  • = Expression() 语句(FoxPro 方言)未生成任何代码。现已修复。
  • 运行时 - +
  • XPP.Abstract.NoMethod()和 XPP.DataObject.NoMethod() 仍然将方法名称作为第一个参数。这个问题已得到修复。
  • 由于参数不正确,StretchBitmap() 的效果与 ShowBitmap() 相同。这一问题已得到修复。
  • Visual Studio 集成 - +
  • 改进了格式化文档代码
  • 修正了 VS 解析器在查找使用 VAR 关键字定义的变量类型时出现的一个问题,该问题可能导致 VS 陷入无尽循环。
  • TEXT ... ENDTEXT 块的内容以及 \ 和 \\ 标记后的一行现在有了自己的颜色
  • @@ -3337,7 +3356,7 @@ Changes in 2.0.8 (Bandol GA 2.08) 编译器 - +
  • 编译器在 “return ”属性目标上出了问题
  • 现在,“statementblock”(语句块)规则内的错误能被更好地检测出来,编译器不会再在这些正确的代码行之后报告许多错误。
  • 修复了与逻辑转换相关的问题。
  • @@ -3345,12 +3364,12 @@
  • 改进了前缀操作、后缀操作和赋值中 FIELD、MEMVAR 和未声明变量的代码生成。
  • 在涉及默认参数时,改进了参数为 ref 或 out 变量的方法调用的代码生成。编译器现在会为这些调用生成额外的临时变量。
  • - +
  • 在与此相关的方言中,编译器现在还支持 ENDFOR 作为 NEXT 的别名和 FOR EACH 作为 FOREACH 的别名。
  • 已添加对 DO <proc> [WITH arguments] 语法的支持
  • 运行时 - +
  • 当要创建文件的基本文件名已作为别名打开时,DbCreate() 函数现在会创建一个唯一的别名
  • 现在,USUAL 值的数值溢出检查与主程序的溢出检查相同
  • DbUnLock() 现在接受记录编号(可选)作为参数
  • @@ -3367,11 +3386,11 @@
  • 修正了转换和“@ez ”图片的问题。
  • VOSDK - +
  • 修复了 SQLSelect 类中重新打开 cursor 时的一个问题。
  • RDD 系统 - +
  • 修复了读取 Advantage MEMO 字段的问题
  • 改进了因索引表达式错误(如缺少函数)而无法打开索引时的错误信息
  • 我们添加了在 RDD 系统中安装事件处理程序的选项。更多信息,请参阅主题 Workarea 事件 。
  • @@ -3381,7 +3400,7 @@
  • DbSetRelation() 无法正常工作。现已修复。
  • VS 集成 - +
  • 修复了 DbServer 和 FieldSpec 实体代码生成中的一个问题
  • 已添加对 DbServer 编辑器中导入和导出按钮的支持
  • 改进了 Xbase++ 方言编辑器内的实体解析。
  • @@ -3392,11 +3411,11 @@
  • 在 “项目属性 ”页面中添加了编译器选项,以抑制生成默认的 Win32 清单。
  • VOXporter - +
  • VOXPorter 忽略了未在 VO 中正确建立原型的实体。这一问题已得到修复
  • FoxPro 方言 - +
  • 我们添加了一个编译器选项 /fox1,用于控制对象的类层次结构。启用 /fox1(FoxPro 方言中的默认值)后,所有类都必须从 Custom 类继承。属性代码生成会将属性值保存在自定义类内部的一个集合中。启用 /fox1- 后,属性将生成为带有后备字段的 “auto” 属性。
  • 我们增加了对 FoxPro 类的支持。请参阅 FoxPro class 了解有关哪些有效,哪些无效的更多信息。
  • 我们新增了对 DIMENSION 和 DECLARE 语句的支持(这些语句可创建一个用数组初始化的 MEMVAR)
  • @@ -3404,14 +3423,14 @@ Changes in 2.0.7 (Bandol GA 2.07) 可能的突破性变化 - +
  • 我们删除了标准头文件中的 #define CRLF。现在 XSharp.Core 中有一个 DEFINE CRLF。如果你在针对 Vulcan 进行编译时发现缺少 CRLF 的错误,那么你可能需要在代码中添加以下内容:
    DEFINE CRLF := e”\r\n”
  • 编译器 - +
  • 导致标记列表为空的 UDC 会在预处理器中引发编译器错误。这一问题已得到修复。
  • - +
  • 如果底层数组类中不存在方法,在数组上调用方法将被转换为以方法名称为参数的 ASend()。
    如果出现这种情况,编译器会发出警告。
  • 编译器对(USUAL)转换产生了错误的代码。这个问题已经修复。在极少数情况下,这可能会导致编译错误。如果发生这种情况,只需通过调用USUAL构造函数创建一个usual:USUAL{somevalue}
  • 修正了在 CLASS ... END CLASS 之外声明的方法的若干问题
  • @@ -3421,14 +3440,14 @@
  • 现在,编译器能更早地检测到语言功能的错误使用(如在 Core 或 FoxPro 方言中使用 VOSTRUCT),从而加快了错误代码的编译速度。
  • 现在,当启用 /vo2 时,编译器也会使用空字符串初始化多维字符串数组,就像下面的代码一样:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • - +
  • 在以前的版本中,如果调用 SELF() 或 SUPER() 的源代码行紧跟在 CONSTRUCTOR() 之后,则无法在该行上设置断点。这一问题已得到修复。
  • 如果项目包含“_DLL METHOD”、“_DLL ASSIGN ”或“_DLL ACCESS”(从 VO 导出后),编译器现在会生成更有意义的错误信息。
  • 当一个源文件包含许多相同的错误时,编译器将不再产生数百条相同的错误信息。每个源文件出现 10 个错误后,编译器只会报告唯一的错误编号。因此,如果您的源代码有 20 条不同的错误信息,那么您仍将看到 20 条错误报告,但如果您的源代码包含 100 次相同的错误类型,那么错误列表将在 10 条错误后被截断。
  • 编译器不再允许代码位于ENDIF 或 NEXT 等结束标记之后。标准头文件 “XSharpDefs.xh ”现在包含了消除这些标记的规则。
  • 运行时 - +
  • 用于 usualtype 的 ++ 和 -- 操作符对日期和日期时间值不起作用
  • 当源文件不存在时,FErase() 和 FRename() 现在会将 FError() 设置为 2
  • File() 函数曾因路径中包含无效字符而引发异常。现在它返回 FALSE 并设置 Ferror()
  • @@ -3444,7 +3463,7 @@
  • AEval 和 AEvalOld() 现在都将数组索引作为第二个参数传递给被求值的代码块
  • RDD 系统 - +
  • 修正了一个问题,即在打开带索引的空 DBF 时,EOF 和 BOF 未同时设为 true。
  • 修复了 DBFNTX 和 DBFCDX 的 DbSeek() 和 Found() 的一个问题
  • DBF 类无法正确解码包含 Ascii 字符 > 127 的字段名和/或索引表达式(字段名如 STRAßE)。
  • @@ -3455,7 +3474,7 @@
  • 修复了 DBFCDX 和 AXDBFCDX 之间的一个小的不兼容问题
  • VS 集成 - +
  • Core 类库模板的文件名中有一个错字,导致无法正确加载该模板
  • Windows 窗体编辑器的代码生成器重复使用 USING 语句。这一问题已得到解决。在设计器中打开和保存表单时,重复的 using 语句将被删除。
  • 编译消息现在仅在生成详细程度为正常或更高时显示在输出窗口上,包括编译时间、警告和错误数量。如果存在编译器错误,警告和错误消息也会显示在较低生成详细程度下。
  • @@ -3465,24 +3484,24 @@
  • 现在,“属性 ”文件夹在 “项目 ”树中被列为第一个子文件夹,而 “VO 二进制文件 ”项目在 “项目 ”树中源代码项目的子文件夹列表中被置于资源项目之前。
  • VOXporter - +
  • VOXPorter 现在以 @@ 作为调试令牌的前缀。
  • VOXPorter 现在可删除同时声明为 ACCESS/ASSIGN 的属性的 INSTANCE 声明
  • VOXPorter 现在可在以 .AND 或 .OR. 分隔的变量名之间添加空格。 因此,“a.and.b ”变为 “a .and. b”。
  • 文档 - +
  • 我们已经“提取”了一些 Visual Objects 运行时函数的文档,并将其添加到我们的运行时文档中。这是一个正在进行中的工作,一些主题需要额外的工作。
  • Changes in 2.0.6.0 (Bandol GA 2.06) 常规 - +
  • 我们收到了关于简化版本号的请求。因此,新版本被称为 Bandol 2.06,文件版本也是 2.06。运行时程序集的程序集版本均为 2.0,我们打算尽可能保持这些版本的稳定,因此您不必被迫重新编译依赖于运行时程序集的代码。
  • 2.0.5.0 中应包含的几个修复未包含在对应版本中。这已在 2.0.6.0 中得到纠正。
  • 编译器 - +
  • 缺少 ENDTEXT 关键字现在会产生错误 XS9086
  • 不平衡的文本合并分隔符会产生警告 XS9085
  • 现在,FoxPro 方言中的 TEXT 关键字只有在它是一行中第一个非空格符号时才会被识别。因此,您又可以在预处理器命令中使用 <text> 这样的标记了。
  • @@ -3490,7 +3509,7 @@
    运行时 - +
  • 后期绑定代码中的运行时错误总是显示为 TargetInvocationException。这样就隐藏了错误的真正原因。现在我们正在解包该错误并重新抛出原始错误,包括导致该错误的调用堆栈
  • 更新了字符串资源中的一些文本
  • 在长度和/或小数的值为 -1 时调用 Str() 函数,会产生与 VO 不兼容的结果。这一问题已得到修复。
  • @@ -3500,25 +3519,25 @@
    RDD 系统 - +
  • 在 Advantage 工作区中读取和写入列的代码现在使用单独的 column 对象,就像 DBF RDD 的代码一样。这使代码更容易理解,速度也会更快。
  • VS 集成 - +
  • TEXT 和 ENDTEXT 之间的文本块现在显示为与字面字符串相同的颜色
  • 与 VO 兼容的项目项目模板不再自动添加对项目的引用
  • 使用此版本的 X# 项目系统打开 2.01.0 及更高版本的项目文件时,将不再 “接触 ”这些文件,因为自该版本发布以来,项目文件格式未作任何更改。
  • VOXporter - +
  • 生成的 Start 函数中的 CATCH 块现在调用 ErrorDialog() 来显示错误。它使用新的语言资源来显示完整的错误,并提供与 VO 兼容的错误信息(Gencode、Subcode 等)。
  • Changes in 2.0.5.0 (Bandol GA 2.01) 编译器 - +
  • END PROPERTY 后的空行可能会使编译器感到困惑。现已修复
  • 编译器中已执行 TEXT ... ENDTEXT 命令(仅限 FoxPro 方言)
  • \ 和 \\ 命令已经实现(仅适用于 FoxPro 方言)
  • @@ -3526,11 +3545,11 @@
  • 错误信息不再使用 Xbase 类型的内部名称 (XSharp.__Usual) 而使用其正常名称 (USUAL)。
  • 宏编译器 - +
  • 创建带有命名空间前缀的类不起作用。现已修复。
  • 运行时 - +
  • 修正了 ArrayNew() 和多个维度的一个问题
  • 使用数字调用数组类的构造函数时,元素已被初始化。这与 Vulcan.NET 不兼容。现在有了一个额外的构造函数,它接受一个逻辑参数 lFill,可用于自动填充数组。
  • ERROR_STACK语言资源的文本已更新
  • @@ -3541,26 +3560,26 @@
  • 我们添加了几个 FoxPro 系统变量(目前只有 _TEXT 有作用)
  • RDDs - +
  • Zap 和 Pack 操作未正确设置 DBF 文件大小
  • 共享模式下的 Append() 无法正确设置 RecCount
  • 使用 Advantage SQL RDDs 之一打开文件不起作用。现已修复。
  • 将 DateTime.Minvalue 写入 DBF 时不会写入空日期,而是写入日期 1.1.1 已修复此问题。
  • VO SDK - +
  • 修正了 ListView:EnsureVisible() 中的一个问题。
  • 一些可疑的类型转换(比如导致之前问题的那个)已经被清理掉。
  • Visual Studio 集成 - +
  • 构造函数调用的参数提示偏差了一个参数。现已修复。
  • 在查找类型时,XSharp 命名空间现在是首先搜索的命名空间。
  • Changes in 2.0.4.0 (Bandol GA) 编译器 - +
  • 修正赋值表达式中的一个问题,即左侧是一个带有括号中工作区的别名表达式:
    (nArea)->LastName := AnotherArea->LastName
  • 多行语句(如 FOR 块)不再在调试器中生成多行断点。
  • 修正了一个问题,即类定义后的空行或带有 “非活动 ”预处理器注释的行会产生编译器错误。
  • @@ -3571,12 +3590,12 @@
  • 索引 PSZ 值不再受 /az 编译器选项的影响
  • 宏编译器 - +
  • 修正了一些别名表达式的问题
  • 宏编译器现在能检测到您在自己的代码中重载内置函数,不再抛出 “方法不明确 ”异常,而是选择您代码中的函数,而不是 X# 运行时中定义的函数。
  • 运行时 - +
  • 修正了 Directory() 函数中的几个问题
  • 修复了 PSZ 值索引问题
  • 在错误对象上添加了 StackTrace 属性,这样在 BEGIN SEQUENCE 中捕获的错误也会有堆栈信息。
  • @@ -3590,7 +3609,7 @@
  • 添加了土耳其语资源。
  • RDD 系统 - +
  • 修复 FPT 文件中的锁定问题
  • 修复了 OrdKeyCount() 和过滤器、作用域以及 SetDeleted() 设置中的若干问题
  • 有些 DBF 文件在不支持小数的字段类型的字段定义的 “小数 ”字节中有一个值。这导致了一些问题。现在这些小数将被忽略。
  • @@ -3600,24 +3619,24 @@
  • 修正了 OrdKeyCount() 与过滤器、SetDeleted() 和作用域结合使用时的若干问题。
  • VO SDK 类 - +
  • 现在,大多数程序库在编译时都禁用了 “后期绑定 ”功能,以提高性能。
    为了帮助实现这一点,我们添加了一些类型化属性,例如 SqlStatement:__Connection 类型为 SQLConnection.
  • Visual Studio 集成 - +
  • 修复了 Brace 匹配代码中的一个问题
  • 改进关键字的 Brace 匹配。新增了多个 BEGIN ... END 结构,以及 DO CASE 内的 CASE 语句和 SWITCH、RECOVER、FINALLY、ELSE、ELSEIF 和 OTHERWISE 语句。
  • 修复在引用已卸载或不可用时添加和删除引用的问题。
  • VOXPorter - +
  • 在导出到 XSharp 时,程序现在可以注释、取消注释和删除 VO 代码中的源代码行。
    您必须在行尾添加注释。支持以下注释:
  • // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    示例:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    Changes in 2.0.3.0 (Bandol RC3) 编译器 - +
  • 选择 /vo2 时,STRING 类型的 STATIC LOCALs 的代码生成不会将变量初始化为空字符串。我们还改进了用编译时常数初始化 STATIC LOCAL 时的代码生成。
  • 为了支持通过引用传递给函数/方法的变量,我们现在将在函数/方法结束时将局部变量分配回参数数组。
  • 如果您将一个枚举的值赋值给另一个枚举的变量,编译器不会抱怨。这一问题已得到解决。
  • @@ -3629,14 +3648,14 @@
  • 编译器允许您在字符串和逻辑类型的变量/表达式之间使用 “+”运算符。现在这已被标记为错误。
  • 宏编译器 - +
  • 修正了在解析与关键字或关键字缩写(如 DATE 和 CODE)相同的字段名以及与内置函数名(如 SET)相同的字段名时出现的问题
  • 修正了一个问题,即使用别名前缀求值的复杂表达式无法正确求值。
  • 宏编译器根据运行时的方言选项进行初始化,以启用/禁用某些行为。
  • 在 FoxPro 方言中运行时,宏编译器现在可以识别用于工作区访问和 memvar 访问的“. ”操作符。
  • 运行时 - +
  • 已添加函数 FieldPutBytes() 和 FieldGetBytes()
  • 添加了函数 ShowArray()
  • 添加了几个缺失的定义,如 MAX_ALLOC 和 ASC_A。
  • @@ -3653,7 +3672,7 @@
  • 不再检查从 USUAL 值到 SHORT、WORD、BYTE 和 SBYTE 的转换是否与 VO 兼容。
  • RDD 系统 - +
  • 在 DBFFPT 中添加了对不同块大小的支持。
  • DBFFPT 现在允许从用户代码中覆盖块大小(创建时)。请注意,块大小小于 32 字节时,FPT 无法在 Visual FoxPro 中打开。
  • 已添加对读取各种 Flexfile 备注字段类型(包括数组)的支持。
  • @@ -3677,18 +3696,18 @@ 这样就创建了一个null日期:“D0”,并创建了一个自动递增整数 “I+”。 自动递增列的初始化计数器从 1 开始,步长为 1。 您可以通过调用 DbFieldInfo 来更改: DbFieldInfo(DBS_COUNTER, 1, 100) // 将字段 1 的计数器设置为 100
            DbFieldInfo(DBS_STEP, 1, 2)   // 将字段 1 的步长设置为 2
    - +
  • 修复了在共享模式下打开 FPT 文件时的锁定问题
  • 修复了 DBFCDX RDD 中与 OrderKeyCount() 以及 Scopes 和 SetDeleted() 的各种设置有关的若干问题。
  • VO SDK 类 - +
  • 修正了 DateTimePicker 类中只分配时间值时的一个问题。
  • 对 System 和 RDD 类进行了一些清理,现在可以在 AnyCPU 模式下编译。这意味着你可以在 64 位程序中使用 DbServer 类!
    这两个库的项目也不再启用 “后期绑定 ”编译器选项。这些库中仍有一些后期绑定代码,但这些代码现在使用显式后期绑定调用,如 Send()、IVarGet() 和 IVarPut()。
  • 由于 __DEBUG__ 处理方式的改变,某些 SDK 程序集没有得到更好的优化。
  • Visual Studio 集成 - +
  • 在编辑器中添加了对 WITH ... END WITH 块的支持
  • 生成本地资源(RC 文件)时,BuildSystem 现在会设置 #define __VERSION__。这将包含 XSharp.Build.DLL 的文件版本号,但不带点。(2.1.0.0 将被写成 “2100”)。
  • VS 帮助菜单中的 XSharp 帮助项目现在可打开本地帮助 (CHM) 文件
  • @@ -3701,13 +3720,13 @@
  • 我们对源代码编辑器中 QuickInfo 的显示方式进行了一些改进。
  • 工具 - +
  • VOXporter 现在也可导出 VERSIONINFO 资源
  • Changes in 2.0.2.0 (Bandol RC 2) 编译器 - +
  • 文件范围的 PUBLIC 声明(用于 MEMVAR)被错误地解析为 GLOBAL。因此,它们被初始化为 NIL,而不是 FALSE。现在它们被正确生成为 public Memvars。memvars 的创建和初始化是在程序集中的 Init3 程序运行后进行的。
  • 实例变量初始化器现在可以引用其他字段,并允许使用 SELF 关键字。但仍不建议这样做。字段初始化的顺序就是它们在源代码中出现的顺序。因此,请确保在代码中以正确的顺序定义字段初始化器。
  • 启用 /vo2 时,AUTO 属性现在也以空字符串初始化。
  • @@ -3715,10 +3734,10 @@
  • 当编译器检测到 2 个类型不同的模糊标识符(例如同名的 LOCAL 和 CLASS)时,错误信息会清楚地显示每个标识符的类型。
  • 修正了预处理器中的一个异常
  • - +
  • 添加了对 FoxPro 运行时 DLL 的支持(译者注:该 DLL 指 XSharp.VFP.DLL)。
  • - +
  • 不再支持 ANY 关键字(USUAL 的别名)。
  • 出现在 COLON(“:”)、DOT(“.”)或 ALIAS (->) 操作符之后的关键字不再作为关键字解析,而是作为标识符解析。这将解决访问 DateTime 类的 Date 属性等代码的解析问题。
  • 我们增加了对 WITH .. END WITH 语句块的支持:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    您也可以使用 DOT (.) 作为名称的前缀。WITH ... ENDWITH 中唯一允许使用的表达式是赋值和方法调用(如上所示)
  • @@ -3814,19 +3833,19 @@ - +
  • 编译器现在会在 RuntimeState 的 Dialect 属性中注册 main 的方言(仅限非 Core 方言)
  • 宏编译器 - +
  • 修正了转义字面字符串的一个问题
  • - +
  • 修正了隐式收缩转换的一个问题
  • 修正了宏编译别名操作 (Customer)->&fieldName 的一个问题
  • 运行时 - +
  • 修正了 Round() 函数中的一个问题。
  • 修正了 ExecName() 函数中的一个问题。
  • 已添加 FoxPro 运行时 DLL。
  • @@ -3836,13 +3855,13 @@
  • 将 NULL 转换为符号会导致异常。这一问题已得到修复。
  • RDD 系统 - +
  • 修复了 ADS RDD 中的几个问题
  • 现在包含 DBFCDX RDD
  • 现在包含 DBFVFP RDD。该 RDD 可用于访问具有 DBF/FPT/CDX 扩展名的文件,并支持 Visual Foxpro 字段类型,如 Integer、Double、日期时间和 VarChar。读取文件应完全支持。除 Picture 和 General 格式以及自增整数字段外,写入文件也应正常工作。您还可以使用 RDD 打开 VFP 的各种 “定义”文件,如项目、表单和报表。RDD “了解 ”索引和备忘录的不同扩展名。您还可以将 DBC 文件作为普通表打开。在未来版本中,我们将支持 VFP 数据库功能。
  • Visual Studio 集成 - +
  • 现在,您可以指定多行语句应在第二行及以后各行缩进。
  • BEGIN NAMESPACE ... END NAMESPACE 中函数的类型查找不包括该命名空间中的类型。
  • 为 Xbase++ 方言中的 INLINE 方法启动 intellisense 功能
  • @@ -3851,7 +3870,7 @@
  • 其他几项(较小的)改进。
  • 工具 - +
  • VOXporter 现在会在 RC 文件中写入 DEFINES,而不再是字面值。
  • VOXporter:修正文件名中包含无效字符的模块名称
  • @@ -3860,7 +3879,7 @@ Changes in 2.0.1.0 (Bandol RC 1) 编译器 - +
  • 添加了对所谓 IF 模式表达式语法的支持,该语法由 IS 测试和变量赋值组成,前缀为 VAR 关键字:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    表达式中引入的变量 oFoo 只在 IF 语句中可见。
    当然,您也可以在其他地方使用该模式,如 ELSEIF 块、CASE 语句、WHILE 表达式等:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • 修正了方法修饰符和泛型方法的一个问题
  • 修正了分部类的大小写和析构函数不同的问题
  • @@ -3880,7 +3899,7 @@
  • Roslyn 代码没有将某些变量标记为 “已赋值但未读取”,以便与旧的 C# 编译器兼容。现在,我们将这些赋值标记为警告。这可能会在您的代码中产生许多以前未检测到的警告。
    为了支持这一点,我们收到了一些请求,希望在编译器中 “开放” 对基于 1 的索引的支持。过去,编译器只允许对 System.Array 类型或 XBase ARRAY 类型的变量进行基于 1 的索引。
    我们现在为运行时添加了几个接口。如果你的类型实现了这些接口之一,那么编译器将识别这一点,并允许你在代码中使用基于 1 的索引,然后编译器将自动从数字索引参数中减去 1。XSharp ARRAY 类型和 ARRAY OF 类型现在也实现了这些接口(之一)。
    这些接口是:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • 运行时 - +
  • 修正了 OrderInfo() 函数中的一些问题
  • 修正了运行时中 DB..() 函数的几个问题
  • 修正了宏编译器的几个问题
  • @@ -3900,7 +3919,7 @@
  • 更改了编译器用于别名操作的函数的实现方式
  • RDD 系统 - +
  • 已添加对 DBF character 字段的支持,最大可达 64K。
  • 实施 DBFCDX RDD
  • 修复了几个与 DBFNTX RDD 有关的问题
  • @@ -3908,7 +3927,7 @@
  • 宏编译索引表达式不属于 _CodeBlock 类型,也不属于 RuntimeCodeBlock 类型(RuntimeCodeblock 被封装在 _CodeBlock 对象内)。
    这样,在将这些表达式存储到 USUAL
  • Visual Studio 集成 - +
  • 修正了键入 VAR 表达式时可能出现的异常
  • 在项目系统备份项目文件时,我们会确保在写入或删除现有文件前清除只读标记。
  • 从 C++ 项目读取 intellisense 数据可能会使 intellisense 引擎陷入无限循环。这一问题已得到修复。
  • @@ -3926,7 +3945,7 @@
  • 有时会在注释区域内触发 intellisense 的类型查找。这一问题已得到修复。
  • 工具 - +
  • VOXPorter 在创建委托时未移除调用约定。现已修复
  • VOXporter 有时会生成包含大量重复资源项目的项目文件。这一问题已得到修复。
  • VOXporter 现在会用“@@”标记与某个新关键字冲突的前缀标识符。
  • @@ -3936,17 +3955,17 @@ Changes in 2.0.0.9 (Bandol Beta 9) 编译器 - +
  • Lexer(编译器中识别关键字和文字等的部分)已重写,速度略有加快。
  • 编译器现在支持数字字面的数字分隔符。因此,您现在可以将 100 万写成
    1_000_000
  • - +
  • 修正了一个问题,即即使选择了编译器选项 -vo2,静态局部变量也不会以 "" 初始化
  • 使用预处理器宏(如 __XSHARP_RT__ )的 #ifdef 命令无法正常工作。
  • Xbase++ 方言现在也支持 “普通 ”类语法。
  • 我们在 Beta 8 中更改了 “入口点 ”算法。现在已经恢复,而且 -main 命令行选项现在也能再次使用。Start方法的 “主体 ”现在封装在一个匿名函数中。
  • - +
  • 重复的包含文件不再产生错误,而是发出警告
  • 修复默认参数值后缀为 “L ”或 “U ”的问题
  • 为使用 clipper 调用约定的方法/函数指定默认参数值时添加了编译器错误
  • @@ -3963,7 +3982,7 @@
  • 如果 CASE 语句中没有 CASE 块,只有一个 OTHERWISE 块,编译器就会崩溃。该问题已得到修复,并添加了关于空 CASE 语句的警告。
  • 运行时 - +
  • 对宏编译器进行了多项修改,如十六进制字面的解析、参数的大小写敏感性(不再区分大小写)以及对函数重载的有限支持。
  • 添加了几个缺失的函数,如 _Quit()、
  • 几个 Ord..() 函数的返回值不正确。现已修复。
  • @@ -3976,7 +3995,7 @@
  • SetDecimalSep() 和 SetThousandSep() 现在还能设置当前文化中的数字分隔符。
  • USUAL -> STRING 转换现在调用 AsString()
  • - +
  • 新增了对 Dbase 风格动态内存变量(MEMVAR、PUBLIC、PRIVATE、PARAMETERS)的支持。更多信息,请参阅帮助文件中的 内存变量
  • 对于 DateTIme 类型的 USUAL,IsDate() 函数现在也返回 TRUE。另外还有一个单独的 IsDateTime() 函数。我们还添加了 IsFractional()(FLOAT 或 DECIMAL)和 IsInteger(LONG 或 INT64)以及 IsInt64()。
  • 在 Error 类中添加了缺失的 Cargo slot。同时改进了 Error:ToString() 方法。
  • @@ -3984,15 +4003,15 @@
  • 还有更多微小的变化。
  • Visual Studio 集成 - +
  • 我们在 “项目属性” 对话框中添加了一个新的标签页: 方言。其中包含特定方言的语言选项。
  • 将 “生成”选项页面(与配置相关)中的 2 个选项移至 “语言”页面(与生成无关),因为这样更合理:
  • - +
  • Include Path
  • NoStdDef
  • - +
  • 我们还在语言页面上添加了一个项目属性,用于指定其他标准头文件(而不是 XSharpDefs.xh)。
  • 在 intellisense 中显示的 XSharp.__Array 类型的名称是错误的
  • 我们在 “项目属性 ”对话页面上添加了条目,以启用 MEMVAR 支持和启用未声明变量
  • @@ -4007,26 +4026,26 @@
  • 在编辑器中注释单行时,现在将始终使用 // 注释格式
  • 工具 - +
  • 本版本无任何更改。
  • Changes in 2.0.0.8 (Bandol Beta 8) 编译器 - +
  • 编译器源代码已升级到Roslyn 2.10(C# 7.3)。因此,出现了一些新的编译器选项,比如 /refout,并且我们还支持"PRIVATE PROTECTED"修饰符的组合,该修饰符将类型成员定义为对同一程序集中的子类可访问,但对其他程序集中的子类不可访问。
  • 我们添加了对 Xbase++ 类声明的支持。请参阅 Xbase++ 类声明主题,了解有关语法、支持和不支持的更多信息。
  • 我们增加了对使用 &Identifier 语法的简单宏的支持
  • 我们增加了对后期绑定属性访问的支持:
  • - +
  • <Expression>:&<Identifier> 语法。
    这相当于 IVarGet(<Expression>,<Identifier>)。
  • <Expression>:&(<Expression2>) 语法。
    这相当于 IVarGet(<Expression>,<Expression2>)。
  • 这两者也可用于赋值,并将被翻译为 IVarPut:
    <Expression>:&<Identifier> := <Value>
    这就变成了 IVarPut(<Expression>,<Identifier>,<Value>)。
  • 即使未启用 “延迟绑定”,所有这些功能也能正常工作。
  • - +
  • 我们添加了一个新的编译器选项 /stddefs,允许您更改标准头文件(默认为 XSharpDefs.xh)。
  • 我们添加了一个新的预处理器匹配标记 <#idMarker>,它可以匹配单个标记(第一个空格符之前的所有字符)
  • 现在选择一种方言后,编译器将自动添加一些编译器宏。VO 方言声明了__VO__宏,Vulcan 方言声明了__VULCAN__宏,harbour 方言声明了__HARBOUR__宏,Xbase++ 方言声明了__XPP__宏。
  • @@ -4035,7 +4054,7 @@
  • 我们还添加了一个警告,当您从较大的 integral 类型赋值到较小的 integral 类型时,该警告将显示,以提醒您注意可能出现的溢出问题。
  • 运行时 - +
  • 此版本包含一个新的更快的宏编译器。它应与 VO 宏编译器完全兼容。宏编译器尚未提供某些 .Net 功能。
  • 我们将大部分通用 XBase 代码移到了 XSharp.RT.DLL 中。XSharp.VO.DLL 现在只包含 VO 专用代码。我们还为 XPP 添加了 XSharp.XPP.DLL
  • 修复与 FRead3()、FWrite3() 和 FReadStr 有关的 Ansi2OEM 问题
  • @@ -4056,7 +4075,7 @@
  • 如果运行时以发布模式编译,DebOut32 无法向调试终端输出数据。这一问题已得到修复。
  • Visual Studio 集成 - +
  • 修正了错误列表中 “当前项目” 的过滤问题
  • 局部变量的类型查找有时会失败。现已修复
  • 修正了可能在 VS 中导致异常的括号匹配问题
  • @@ -4069,7 +4088,7 @@
  • 不属于 X# 项目也不属于 Vulcan 项目的 PRG 文件现在也会在编辑器中着色。
  • 工具 - +
  • VulcanXPorter 总是调整引用的 VO 库,并忽略 “使用 X# 运行时 ”复选框
  • VOXPorter 现在有一个选项,可将 AEF 文件中引用的资源复制到项目的资源子文件夹中
  • VOXPorter 现在还会将 cavowed、cavofed 和 cavoded 模板文件复制到项目的属性文件夹中。
  • @@ -4078,7 +4097,7 @@ Changes in 2.0.0.7 (Bandol Beta 7) 编译器 - +
  • 在调用带有 USUAL 参数的运行时函数时,编译器现在会自动优先选择带有 “传统 ”VO 类型的方法或函数,而不是带有增强 .Net 类型的方法或函数。例如,如果有两个重载,一个接收 byte[],另一个接收字符串,那么接收字符串的重载将优先于接收 byte[] 的重载。
  • 解决了 IIF() 表达式中的 .NOT. 表达式问题
  • 改进了调用表达式(如 String.Compare())的调试器断点生成功能
  • @@ -4087,7 +4106,7 @@
  • 编译器为数组操作生成的代码现在使用 X# 运行时声明的新接口(见下文)。
  • 运行时 - +
  • 我们添加了几个缺失的函数,如 _GetCmdLine、Oem2AnsiA() 和 XSharpLoadLibrary。
  • 修复了 CreateInstance、IVarGet、IVarPut()、CtoDAnsi() 等程序中的问题。
  • 为 FRead4() 添加了 VO 兼容重载
  • @@ -4096,25 +4115,25 @@
  • 我们添加了一个新的 FException() 函数,该函数可返回低级文件操作中发生的最后一次异常
  • 现在支持将包含 PTR 的 usual 转换为 LONG 或 DWORD
  • 新增了一些与数组处理相关的接口。编译器不再在代码中插入对 Array 的转换,而是根据索引参数的类型插入对这些接口之一的转换。USUAL 类型实现了 IIndexer 和 IIndexProperties,当该对象公开接口时,会将调用派发到通常的对象内部。在对 ARRAY OF <type> 使用 AEval 或 AScan 时,可使用这种方法对属性进行索引访问。
  • - +
  • XSharp.IIndexer
  • XSharp.INamedIndexer
  • XSharp.IIndexedProperties
  • SDK 类 - +
  • 我们添加了来自 Paul Piko 的混合用户界面类(经 Paul 许可)
  • 工具 - +
  • Vulcan XPorter 现在还有一个选项,可将运行时和 SDK 引用替换为 X# 运行时引用
  • Changes in 2.0.0.6 (Bandol Beta 6) 编译器 - +
  • 编译器有时仍会对编译器生成的未使用变量发出警告。这一问题已得到修复。
  • 编译器现在会发出尚未支持 #pragmas 的警告 (9006)
  • 添加了编译器宏 __FUNCTION__ ,它以原始格式返回当前函数/方法的名称。
  • @@ -4134,7 +4153,7 @@
  • 修正了 PDB 行号生成中的一个问题,该问题会导致调试器中出现不正确的行号
  • Visual Studio 集成 - +
  • 对于在 #include 文件中定义的 #defines,源代码编辑器并不总是显示正确的 “活动 ”区域。
  • 打开不含实体的源文件(如头文件)可能会在 VS 内出现错误信息。
  • 修正了编辑器中的 null 引用异常
  • @@ -4145,16 +4164,16 @@
  • 在项目属性页面添加了选择 Harbour 方言的选项。
  • 生成系统 - +
  • 生成系统无法识别源代码中已注释的 NAMESPACE 开头行。现已修复。
  • VOXporter - +
  • 我们在输出文件中添加了按字母顺序排列实体的选项。
  • 我们添加了一个选项,您可以选择将 X# 运行时作为引用添加到您的应用程序中(否则将使用 Vulcan 运行时)。
  • 运行时 - +
  • 调用 SetInternational(#Windows) 后,SetCentury 设置不正确。现已修复。
  • 日期的 Descend 函数现在会返回一个数字,就像在 VO
  • 函数 ChrA 和 AscA 已更名为 Chr() 和 Asc(),并删除了原来的函数 Chr() 和 Asc()。原来的函数使用的是 DOS (Oem) 代码,与 Visual Objects 不兼容。
  • @@ -4164,13 +4183,13 @@
  • 所有字符串 - PSZ 例程(String2PSz()、StringAlloc() 等)现在都使用 Windows Codepage 将 unicode 字符串转换为 ansi。
  • 如果您的程序库在编译时使用了 “兼容字符串比较”,但主应用程序没有使用,那么程序库中的字符串比较将遵循与主应用程序相同的规则,因为主应用程序在运行时注册了 /vo13 设置。运行时中的 “兼容 ”字符串比较例程现在会检测到主程序不想进行 VO 兼容字符串比较,并将简单地调用正常的 .Net 比较例程。
    因此,我们建议第三方产品在其代码中始终使用兼容字符串比较。
  • - +
  • 根据源代码注释生成了运行时的初步文档,并将其作为本文档的一个章节。
  • VO SDK - +
  • 该版本包含根据 X# 运行时编译的第一版 VO SDK。我们包含了以下类库
  • - +
  • Win32API
  • System Classes
  • RDD Classes
  • @@ -4181,14 +4200,14 @@
  • Report Classes
  • - +
  • 所有程序集都以 VO<Name>.DLL 命名,这些程序集中的类都在 VO 命名空间中。
  • 本 SDK 基于 VO 2.8 SP3 源代码。VO 2.8 SP3 和 VO 2.8 SP4 之间的差异稍后将合并到源代码中、
  • 不包括 OLE、OleServer 和 Internet Server 库。XSharp.VO 库中包含 OleAutoObject 类及其支持类。不包括 OleControl 和 OleObject。
  • 这些类的初步文档是根据源代码注释生成的,已作为章节纳入本文档。
  • RDD 系统 - +
  • 此版本包含 RDD 系统的第一个版本。DBF-DBT 已准备就绪。其他 RDD 将在后续版本中陆续推出。此外,大部分与 RDD 相关的功能也已在此版本中运行。
  • 该版本还包含 Advantage RDD 的第一个版本。使用该 RDD,您可以访问 DBF/DBT/NTX 文件、DBF/FPT/CDX 文件和 ADT/ADM/ADI 文件。RDD 名称与 Vulcan 的 RDD 名称相同。(AXDBFCDX、AXDBFNTX、ADSADT)。我们还支持 AXDBFVFP 格式和 AXSQLCDX、AXSQLNTX、AXSQLVFP。有关这些 RDD 的差异和可能性的更多信息,请参阅 Advantage 文档。
    我们在 Advantage 客户端引擎的基础上对 Advantage RDD 进行了编码。我们的 RDD 系统会检测您是在 x86 还是 x64 模式下运行,并相应地调用 Ace32 或 Ace64 中的函数。
    要使用 Advantage,您需要将支持 DLL 从 Advantage Vulcan RDD 复制到您应用程序的文件夹中。请查看 Vulcan 的 Advantage 文档,查看 DLL 列表。Advantage RDD 是标准 XSharp.RDD.DLL 的一部分,因此取代了 Vulcan 的 AdvantageRDD.Dll。
  • XSharp.Core DLL 现在也支持 RDD。我们选择不在函数中实现,而是在 CoreDb 类中作为静态方法实现。使用 VoDb..() 函数的旧代码可以通过将 “VoDb ”更改为 “CoreDb ”来移植。
    在 VO 和 Vulcan 中作为 USUAL 的参数和返回值在 CoreDb 类中作为 OBJECT 实现。
    ..Info() 方法有两个重载。一个重载Object,一个重载Object引用。
    CoreDb 中的方法用逻辑值返回成功或失败,就像 VO 中的 VODB..() 函数一样。如果您想知道上次操作过程中发生了什么错误,可以使用 CoreDb._ErrInfoPtr() 方法进行访问。该方法返回 RDD 操作中发生的最后一次异常。
  • @@ -4202,31 +4221,31 @@ Changes in 2.0.0.5 (Bandol Beta 5) 编译器 - +
  • 使用本地资源的程序集的强命名密钥无效。现已修复
  • 当同一源代码(PRG)文件包含两次包含文件时,就会产生大量编译器警告,提示重复的 #defines。特别是当 Vulcan VOWin32APILibrary.vh 被包含两次时,每个源文件将产生超过 15000 个编译器警告。大量的警告会导致编译器占用过多内存。现在,当我们检测到同一文件被包含两次时,就会输出编译错误。我们还为每个源 (PRG) 文件添加了 500 个预处理器错误的限制。
  • Beta 4 中的一项更改可能会导致编译器对 X# 编译器自动引入的未使用变量发出警告。这种警告将不再生成。
  • 现在,编译器可以正确地将某些编译器选项存储到 XSharp 的运行时状态中。
  • 运行时 - +
  • 修复了 Ansi2OEM 和 OEM2Ansi 功能中的一个问题。
  • 修正了 SetCollation(#Windows) 排序中的一个问题
  • 修正了 ASort() 等运行时函数中的字符串比较问题。现在,它还尊重新的运行时属性 CompilerOptionVO13,以控制排序
  • Visual Studio 集成 - +
  • 编辑器成员下拉菜单中的成员排序是根据方法名和属性名进行的,不包括类型名。当源文件包含多个类型时,成员下拉菜单中的成员将混合排序
  • 生成系统 - +
  • VO15 的默认值已从 false 改回未定义。
  • Changes in 2.0.0.4 (Bandol Beta 4) 编译器 - +
  • 可能的突破性改变:函数现在总是优先于同名方法。如果要调用同一类中的方法,需要在方法前加上类型名(静态方法)或 SELF: 前缀。如果没有冲突的函数名,则仍可使用方法名调用该方法。我们建议在方法调用前加上前缀,以便代码更易于阅读。
  • 编译器只接受一个标识符,没有 INSTANCE、EXPORT 或其他前缀,也没有类声明中的类型。编译器会创建一个 USUAL 类型的公共字段。现在已经不可能了。
  • 改进了位置关键字检测算法(这也会影响源代码编辑器)
  • @@ -4235,13 +4254,13 @@
    编译时会警告您应该使用赋值运算符 (:=) 。 我们之所以添加这一功能,是因为许多人(包括我们自己)从 VB 和 C# 中复制了操作符为单个等号的示例。 - +
  • 有关冲突类型的错误信息现在包括完全合格的类型名称。
  • 编译器不再包含字面浮点运算的宽度。这与 VO 兼容。
  • 现在允许使用枚举类型的默认参数。
  • 运行时 - +
  • 添加了几个缺失的函数,如 __Str() 和 DoEvents()
  • 修正了宏编译器在处理非英语语言时出现的问题。
  • 为 Is...()函数添加了几个重载,这些函数使用 PSZ 而不是字符串,例如 IsAlpha() 和 IsUpper()。
  • @@ -4255,7 +4274,7 @@
  • 结合 SetFixed() 和 SetDigitFixed(),修复 Str() 系列函数。
  • Visual Studio 集成 - +
  • 修正了在 Visual Studio 最新版本中生成项目时出现的问题
  • 有几个 “关键字” 以前没有同步大小写,如 TRUE、FALSE、NULL_STRING 等、
  • 只要用户将光标放在关键字上或紧随其后,当前行中的关键字就不会大小写同步。这意味着,当您键入 String 并希望继续将其改为 StringComparer 时,格式器将不再启动,并在您有机会完成单词之前将 “String ”改为关键字的大小写。
  • @@ -4267,13 +4286,13 @@
  • 修正了在 X64 模式下调试时的一个问题。
  • 修复了与 SCC 集成比较源代码文件时出现的异常。
  • 修复了 XAML 编辑器的若干问题:
  • - +
  • 代码现在以严格的调用约定生成,以避免在启用编译器选项 “隐含 CLIPPER 调用约定” 时出现问题
  • 出于同样的原因,WPF 和其他模板现在都包含 STRICT 调用约定
  • XAML 编辑器无法正确加载当前 DLL 或 EXE,因此在解析命名空间和向工具调色板添加用户控件时出现问题。这一问题已得到修复。
  • - +
  • 我们在 Tools/Editor/XSharp/Intellisense 选项中添加了一个选项,允许您控制编辑器中成员组合框的工作方式。你可以选择在右侧组合框中只显示当前类型或所有实体的方法和属性。左侧组合框始终显示文件中的所有类型。
  • 更新了部分项目和项目模板。没有参数的方法和构造函数现在有了严格的调用约定。此外,在 Core 方言模板中,编译器选项 /vo15 已被明确禁用。
  • @@ -4281,21 +4300,21 @@ Changes in 2.0.0.3 (Bandol Beta 3) 编译器 - +
  • 当两个方法重载的原型相匹配时,编译器现在会优先选择非泛型方法,而不是泛型方法
  • 修正了编译包含预处理器命令的单行源代码时可能出现的异常。
  • 运行时 - +
  • 添加了 Mod() 函数
  • 已添加不带参数的 ArrayNew() 重载
  • - +
  • 当 length(RHS) > length(LHS) 和 SetExact() == FALSE 时,修正了 __StringNotEquals() 中的问题。
  • 添加了用于 USUAL 溢出错误的缺失字符串资源
  • Visual Studio 集成 - +
  • 改进了关键字大小写同步和缩进。打开源文件时也会同步 “关键字大小写”。
  • 双击查找结果窗口打开源文件,不再为同一源文件打开新窗口
  • 提高了 intellisense 的类型查找速度
  • @@ -4307,18 +4326,18 @@
  • 修正了窗口编辑器为标签页生成代码的问题
  • Vulcan XPorter - +
  • 解决方案文件中定义的项目依赖关系未正确转换
  • VO XPorter - +
  • 修正了用定义值替换资源名称的问题
  • Changes in 2.0.0.2 (Bandol Beta 2) 编译器 - +
  • 编译器现在可以透明地同时接受用于 XBase Array 索引的 Int 和 Dword 参数
  • 当编译器在 XSharp.VO 中发现一个弱类型的函数,而在 XSharp.Core 中发现一个强类型的函数时,编译器会选择 XSharp.Core 中的强类型函数。
  • 在 VO 和 Vulcan 方言中,有时会显示(不正确的)“重复使用 ”警告。现在这种情况已被消除。
  • @@ -4328,7 +4347,7 @@
  • 现在仅在 VO/Vulcan 方言中支持 /vo6、/vo7 和 /vo11
  • 运行时 - +
  • 删除了 Array 索引器的 DWORD 重载
  • 修正了 ErrString() 的重载问题
  • 修正了 _DebOut() 的重载问题
  • @@ -4337,7 +4356,7 @@
  • 现在,当释放固定内存块时,它们会被填充为 0xFF,以帮助检测问题
  • Visual Studio - +
  • 修复 VS2017 在生成时 “挂起” 的问题
  • 修复 VS2017 中显示工具提示(QuickInfo)时的 “挂起 ”问题
  • 修正了调试 x64 应用程序的问题
  • @@ -4347,7 +4366,7 @@
  • 转到定义的改进
  • 生成系统 - +
  • 修复嵌入式资源命令行选项中 CRLF 的问题
  • @@ -4355,14 +4374,14 @@ Changes in 2.0.0.1 (Bandol Beta 1) 编译器 新特性 - +
  • 已添加对 ARRAY OF 语言结构的支持。有关详细信息,请参见 Runtime 。
  • 在使用 VO 或 Vulcan 方言编译时,添加了对 X# Runtime 程序集的支持。
  • 已添加对 “伪 ”函数 ARGCOUNT() 的支持,该函数可返回使用 clipper 调用约定编译的函数/方法中已声明参数的数量。
  • 为给 foreach 局部变量赋值添加了一个新的警告编号。为 USING 和 FIXED 局部变量赋值将产生错误。
  • 优化 - +
  • 优化了 Clipper 调用约定函数/方法的代码生成
  • 不再支持 /cf 和 /norun 编译器选项
  • 预处理器不再删除空白。这样,在编译使用预处理器的代码时,错误信息会更好。
  • @@ -4371,7 +4390,7 @@
  • 现在,预处理器在检测到递归 #include 文件时会产生错误。
  • Bug 修复 - +
  • 修正了在 Vulcan 或 VO Dialect 中编译时在参数上使用 [CallerMemberAttribute] 的问题
  • Abstract 属性不应再对正文产生警告
  • 现在,您可以正确使用 ENUM 值作为数组索引。
  • @@ -4381,14 +4400,14 @@
  • 修正了 LOCAL x[10] 声明编译不正确的问题。现在可编译为包含 10 个元素的局部 VO 数组。
  • Visual Studio 集成 - +
  • 版本 1.2.1 引入了一个问题,可能导致输出文件被 intellisense 引擎锁定。现已修复
  • 编辑器解析器在处理嵌套类型时出现问题。现已修复
  • X# 项目内的枚举代码完成中未包含枚举成员
  • 代码重新格式化方面的一些改进
  • 在 “工具/选项 ”中为编辑器添加了选项,以便在 “所有标记 ”完成列表中包含关键词
  • - +
  • 修正了一个问题,即无法加载程序集以检索元信息时,程序集会 “永远 ”重试
  • 修正了从包含托管代码和非托管代码的程序集中检索类型信息的问题。
  • 在 IDE 属性窗口中添加了一些引用程序集的属性
  • @@ -4399,22 +4418,22 @@
  • 修复了代码模型有时会锁定项目引用的输出 DLL 的问题
  • 生成系统 - +
  • 修正了 XML 文档文件的命名问题。
  • 运行时 - +
  • 已添加 XSharp.Core.DLL、XSharp.VO.DLL 和 XSharp.Macrocompiler.DLL。
    已实现并支持大多数运行时函数。更多信息请参阅 X# Runtime章节
  • VO XPorter - +
  • 删除了 SDK 相关选项。这些选项稍后将转移到一个新工具中。
  • Changes in 1.2.1 编译器 - +
  • 修正了一个问题,在该问题中,编译错误会导致 “Failed to emit module” 的信息,而没有进一步的信息
  • 修正了别名表达式(如 CUSTOMER->CUSTNO++)中 ++、-- += 和类似操作的问题
  • 在带参数的构造函数之后,构造函数初始化器和集合初始化器不起作用。现已修复。
  • @@ -4423,7 +4442,7 @@
      CATCH ID AS ExceptionType
      CATCH ID                  // 默认为 Exception类型
      CATCH AS ExceptionType  
      CATCH            // 默认为 Exception类型
    Visual Studio 集成 - +
  • 提高后台代码扫描速度
  • 提高编辑器内后台解析器的速度
  • 修正了窗口窗体编辑器使用的 codedom provider中的一个问题
  • @@ -4432,7 +4451,7 @@ Changes in 1.2.0 编译器 - +
  • 为了与 VO 和 Vulcan 兼容,现在可以为通过引用声明的参数传递 NULL。
    我们强烈建议不要这样做,除非你确保函数期望这样做,并且不会在没有检查 NULL 引用的情况下赋值给引用参数。只有启用 /vo7 编译器选项后,这种做法才有效。
  • 我们对 Lexer 进行了一些优化。因此,编译器的速度应该会更快一些
  • 我们更正了自动生成构造函数 (/vo16) 的一个问题,该构造函数适用于继承自外部 DLL 中定义的类的类
  • @@ -4447,7 +4466,7 @@
  • 编译器现在会在使用 #pragma 命令时发出警告
  • Visual Studio 集成 - +
  • 进一步提高编辑器的性能。特别是包含错误代码的大型源文件可能会降低编辑器的运行速度。
  • 当包含文件只包含 #defines(如 Vulcan 头文件)时,编辑器解析器不再重复尝试解析这些文件
  • 源代码编辑器试图为注释区域中的单词显示 intellisense。该问题已得到解决。
  • @@ -4457,19 +4476,19 @@
  • 匹配的关键字,如 IF ... ENDIF 和 FOR ... NEXT,现在应在编辑器中突出显示
  • 如果在编辑器中选择了一个标识符,那么当前方法/函数中所有使用该标识符的地方都会高亮显示该标识符。
  • 我们添加了几项功能,您需要在 “工具/选项/文本编辑器/XSharp/Intellisense”对话框中启用/禁用这些功能:
  • - +
  • 按下点时,编辑器中的代码补全也支持实例成员补全。
    请注意,编译器只接受 Core 语言中的这一选项,而不接受 VO 和 Vulcan 方言中的这一选项。因此,该选项在使用其他方言的项目中不起作用。
  • 我们添加了一些选项来控制编辑器中下拉式组合框的排序,以及这些组合框中是否应包含字段/实例变量。如果不进行排序,下拉框中的条目将按照它们在源文件中的顺序显示。
  • 我们添加了键入时自动完成标识符的选项。这包括locals、参数、类字段、命名空间、类型等。
  • - +
  • 子类中的重载方法,如果其签名与其重载的父类方法相同,则在完成列表中不再被视为重载方法
  • 缺少一个引用 DLL 可能会 “杀死 ”intellisense 引擎。现在这种情况不再发生。当然,缺失的引用 DLL 的类型信息不会包含在内。
  • 生成的 XAML 代码源文件(OBJ 文件夹中的 .g.prg 文件)中的属性和方法现在也会被解析,并包含在intellisense以及类浏览器和对象浏览器窗口中的完成列表中。
  • VOXPorter - +
  • 现在,安装程序包含了正确版本的 VOXPorter <g> 。
  • VOXporter 现在支持以下命令行选项:
    /s:<source folder or aef>
  • @@ -4477,7 +4496,7 @@ /r:<runtime folder> /nowarning - +
  • 针对图形用户界面类中发现的问题添加了一些代码更正
  • 现在,从不同工作目录运行 VOXPorter 时也能找到模板文件了
  • @@ -4485,26 +4504,26 @@ Changes in 1.1.2 编译器 - +
  • 已为包含 #pragma 的代码添加编译器警告
  • 修正了 iif() 函数和负字面值的一个问题
  • Visual Studio 集成 - +
  • 修复了键入发送(:)运算符后编辑器运行缓慢的问题
  • 枚举值现在能在调试器中正确解码
  • 修正了用于处理字面 FALSE 值和负数的 CodeDom 提供程序。因此,更多(Vulcan 创建的)winforms 应能顺利打开
  • 当某些位置关键字(如 ADD 和 REMOVE)出现在冒号“: ”或点号“. ”之后时,在编辑器中不再将其显示为不完整代码的关键字;
  • VOXPorter - +
  • 修复从 SDK 导出 VO RDD 类的问题
  • Changes in 1.1.1 编译器 - +
  • 修正了调试器 DO CASE 和 OTHERWISE 断点的一个问题
  • 修正了在 #included 文件中定义的源代码的调试器断点问题
  • 已添加对 Harbour Global 语法的支持,其中 GLOBAL 关键字是可选的
  • @@ -4514,14 +4533,14 @@
  • 为 Xbase 类型名称和 XSharp Runtime 中的函数名称准备编译器
  • 预处理器 - +
  • 修复了预处理器中的一个崩溃问题
  • 对于没有匹配标记的块,预处理器会产生 “可选块不包含匹配标记 ”的错误。现在允许了。
    (例如,某些数据库 UDC 中的 ALL 子句)
  • 当多个源文件使用同一个包含文件,而该文件的不同部分因 #ifdef 条件的不同而被包含时,预处理器会感到 “困惑”。这一问题已得到修复。
  • 无法正确处理从 #include 文件导入的源代码中的调试器文件/行号信息。
  • Visual Studio 集成 - +
  • 修复了 Windows 窗体编辑器的几个问题
  • VO 兼容编辑器生成的类声明现在包含 PARTIAL 修饰符。
  • @@ -4529,7 +4548,7 @@ Changes in 1.1 编译器 - +
  • 修正了 X# 1.0.3 发布后在后期绑定代码中使用代码块的问题
  • 修复了一个问题,即在子类中覆盖从只定义了赋值(Set)或访问(Get)的类继承的属性时出现的问题。
  • 已启用编译器选项 /vo16 :自动生成 VO Clipper 构造函数。
  • @@ -4550,7 +4569,7 @@
    Visual Studio 源代码编辑器 - +
  • 为函数和过程添加了转到定义
  • 改进函数和过程的信息提示
  • 改进的大小写同步
  • @@ -4562,7 +4581,7 @@
  • 改进后台文件扫描器的性能。在编译过程中,该扫描器也会暂停,以提高编译速度。
  • 项目系统和 MsBuild - +
  • 修正了项目文件中条件属性组的一个问题。现有项目将自动更新
  • 在 MsBuild 和 VS 项目属性页面中添加了对 /vo16 编译器选项的支持。
  • 修正了 /nostddefs 编译器选项无法正常工作的问题。
  • @@ -4574,19 +4593,19 @@
  • 在 64 位进程内运行时,MSBuild 支持 DLL 无法找到编译器和本地资源编译器的位置
  • 表单编辑器 - +
  • 改进了 Windows 窗体编辑器对项目引用中定义的类型的支持。现在,我们将检测这些项目的输出文件位置,就像 C# 和 VB 项目系统一样。
  • 表单编辑器的代码分析器在处理未类型化的方法时出现问题。现已修复。
  • VO 窗口和菜单编辑器 - +
  • 窗口和菜单编辑器的代码生成器将删除未使用的旧定义。
  • 更改了 VO 窗口的项目模板,以解决为尚未保存的窗口添加事件处理程序时出现的问题
  • 窗口编辑器的代码生成器未输出 WS_VISIBLE 的样式。现已修复。
  • 调试器 该版本引入了第一版 XSharp 调试器支持 - +
  • Visual Studio 调试器现在可在调用堆栈窗口和其他地方显示 X# 语言
  • 函数、方法和过程现在以 X# 语言风格显示在调用栈窗口中
  • 编译器生成的变量不再显示在局部变量列表中
  • @@ -4594,12 +4613,12 @@
  • X# 预定义类型(如 WORD、LOGIC 等)会在 locals 窗口中显示其 X# 类型名称
  • 测试 - +
  • 已添加对 “测试资源管理器 ”窗口的支持
  • 添加了使用 XUnit、NUnit 和 Microsoft Test 进行单元测试的模板
  • 其他 - +
  • 添加了在 XSharp 之后(重新)安装 Vulcan 时的警告,这可能会导致 Visual Studio 集成出现问题
  • VS 解析器将接口标记为结构而非接口。这一问题已得到修复。
  • 在 VS 工具菜单中,XPorter 工具有了更好的名称
  • @@ -4607,11 +4626,11 @@
  • 对 X# 附带的模板进行了几处修改
  • XPorter - +
  • 修复属性组条件中的问题。
  • VOXPorter - +
  • 生成 clipper 构造函数现在默认为禁用
  • 修正了 VS 模板文件中的一个问题。
  • @@ -4619,7 +4638,7 @@ Changes in 1.0.3 编译器 - +
  • 修正了使用 usual 参数索引的 Vulcan 数组的索引计算问题
  • 修正了以 begin sequence 语句或 try 语句结束的代码自动生成返回值的问题
  • 优化了字面符号的运行性能。
    编译器现在会为字面符号生成一个符号表,应用程序中使用的每个字面符号只创建一次。
    如果您的应用程序使用了大量(数千个)字面符号,启动时可能会有一点延迟。但运行时的性能应该会更好。
  • @@ -4629,7 +4648,7 @@ Changes in 1.0.2 编译器 - +
  • 添加了对 XML 文档生成的支持。我们支持与 C# 编译器和其他 .Net 编译器相同的标记。
  • 改进了一些解析器错误。
  • 为编译器和脚本分别创建了可移植和非可移植(.Net 框架 4.6)项目
  • @@ -4643,11 +4662,11 @@
  • 在 VO/Vulcan 方言中,一些针对未使用变量的编译器警告被抑制。现在它们又被激活了。
  • 脚本 - +
  • 脚本在 1.01 版中不起作用
  • Visual Studio 集成 - +
  • QuickInfo 可能会在 VS 编辑器中产生 “挂起 ”现象。现已修复
  • 为 globals 和 defines 添加了快速信息
  • 为 globals 和 defines 添加了完成列表
  • @@ -4661,7 +4680,7 @@
  • 修复了 Visual Studio 2017 15.3 及更高版本可能出现的 “挂起 ”问题
  • VO Xporter - +
  • 修正了导入某些 VO 2.7 AEF 文件时出现的问题
  • 修正了解决方案文件夹名称中可接受字符的问题
  • xsproj 文件中还包含 VO 表单和菜单实体
  • @@ -4671,27 +4690,27 @@ Changes in General Release (1.0.1.1) 编译器 - +
  • 修复了 Vulcan Runtime 非常老的版本的一个问题
  • 以 DIM Byte[] 及类似方式声明的变量现在会被编译器固定
  • 编译器未正确处理 [Return] 属性。现已修复
  • 由于 Vulcan 运行时的问题,USUAL 和 FLOAT 的复合赋值(u+= f 或 -=)在运行时导致堆栈溢出。现在,这些表达式会生成编译器错误,并建议更改为简单赋值 ( u := u + f)
  • Visual Studio 集成 - +
  • 在解析类型时,XSharp 项目之间的项目引用也作为 assemblyreference 加载。这可能会导致速度问题和不必要的内存占用
  • 提高了生成完成列表(如类型的方法和字段)的速度。
  • 我们还添加了 “完成列表选项卡”,你可以在不同的选项卡上看到字段、属性、方法等。您可以在 “工具/选项/文本编辑器/XSharp/Intellisense”选项页面中启用/禁用该功能。
  • VO XPorter - +
  • 我们添加了一项检查,以确保 X# 项目的默认命名空间不能包含空白字符
  • Changes in General Release (1.0.1) 新特性 - +
  • 我们新增了对 ENUM 基本类型(ENUM Foo AS WORD)的支持
  • 我们为 Lambda 表达式添加了单独的语法
  • 我们新增了对匿名方法表达式的支持
  • @@ -4699,7 +4718,7 @@
  • 带有 ExtensionAttribute 属性的方法和带有 ParamArrayAttribute 属性的参数现在可以正确编译,但会发出警告
  • 编译器 - +
  • 修正了字面代码块后期绑定赋值的问题
  • 解决多个名称冲突
  • 改进了若干错误信息
  • @@ -4713,7 +4732,7 @@
  • 如果检测到函数和静态方法之间存在歧义,就会显示警告信息
  • Visual Studio - +
  • 为 “Using Static”类中的函数和方法添加了参数提示
  • 为 Clipper调用约定函数和方法添加了参数提示
  • 在intellisense中添加了对泛型的支持
  • @@ -4732,14 +4751,14 @@
  • 添加了启动 VO Xporter 工具的菜单选项
  • 添加了依赖项后台扫描功能,确保新生成的代码经过扫描后可用于intellisense
  • 对 Windows 窗体编辑器和项目系统进行了多项修改:
  • - +
  • 添加了对添加 ActiveX 控件的支持
  • 已添加对表单继承的支持。在 C# 继承表单向导中也能看到我们的表单
  • 添加了将 Windows 窗体自定义控件添加到 Visual Studio 工具箱的支持
  • Windows 表单编辑器使用的 Codedom 解析器的一些性能增强。对于较大的表单,您应该会注意到这一点。
  • - +
  • 修复了用户报告的若干崩溃问题
  • 本地资源文件 (.rc) 现在可在源代码编辑器中打开
  • 提高后台解析速度
  • @@ -4747,24 +4766,24 @@
  • 改进了编辑器中 “类型 ”和 “成员 ”下拉菜单的处理方式
  • 工具 - +
  • 添加了 VO Xporter 工具的第一个版本
  • 安装程序现在可以注册 .xsproj 文件、.prg、.ppo、.vh、.xh 和 .xs 文件,以便用 Visual Studio 打开它们。
  • 文档 - +
  • 我们添加了一些章节,介绍如何将 VO AEF 和/或 PRG 文件转换为 XIDE 项目和/或 Visual Studio 解决方案。
  • Changes in 0.2.12 脚本 - +
  • 我们增加了使用 X# 脚本的功能。有关如何工作的一些文档可以在这里找到。 您还可以在 下面文件夹中查找脚本示例
    c:\Users\Public\Documents\XSharp\Scripting folder
  • 编译器 所有方言 - +
  • 编译器现在基于 C# 7 的 Roslyn 源代码。
  • 现在,不同源文件中同一(分部)类的同名 Accesses 和 Assigns 将合并为一个属性。这将在一定程度上降低编译器的运行速度。我们建议您在同一源文件中定义 ACCESS 和 ASSIGN。
  • 在预处理器中添加了对重复结果标记的支持
  • @@ -4775,12 +4794,12 @@
  • 我们对字符字面规则做了一些修改。对于 VO 和 Harbour 方言,现在有了其他规则,而对于 Core 和 Vulcan,则没有这些规则。请参见 Char 字面量
  • VO 和 Vulcan 方言 - +
  • 修复了多个 VO 兼容性问题
  • QUIT、ACCEPT、WAIT、DEFAULT TO 和 STORE 命令现已从编译器中移除,并在我们的标准头文件 “XSharpDefs.xh ”中定义,该文件位于 Program Files(x86)/XSharp\Include 文件夹中。这些命令不在 Core 方言中编译
  • 已添加对 CONSTRUCTOR() CLASS MyClass 和 DESTRUCTOR CLASS MyClass(换句话说,在 CLASS ... ENDCLASS 结构之外)的支持
  • - +
  • 如果在关键字 NIL、NULL_STRING、NULL_OBJECT 等之前使用 #(不等于)运算符而不留空格,那么 #NIL 就不会被视为符号 NIL,而会被视为 Not Equal To NIL。
  • SizeOf 和 _TypeOf 是 VO 中的特殊标记,不能缩写。我们改变了 X# 的行为,使之与之相匹配。这样可以防止与 _type 等变量的名称冲突。
  • 我们增加了对带有嵌入式 @ 符号的 DLL 入口点的支持,例如 “CAVOADAM.AdamCleanupProtoType@12”。
  • @@ -4789,11 +4808,11 @@
  • 修正了 VO 编译出 “不正确 ”代码的几种情况,例如看起来像这样的代码块:
    cb := { |x|, x[1] == 1 }
    注意多出来的逗号。
    现在编译成了相同的代码块:
  • cb := { |x| x[1] == 1 } - +
  • 由于 /vo16 编译器选项有太多副作用,目前已(译者注:暂时)被禁用(不起任何作用)。
  • Visual Studio 集成 - +
  • 删除的文件和文件夹会被移动到回收站。
  • 修正了 XAML 编辑器中的intellisense问题
  • 添加了对不同 X# 项目之间代码完成的支持
  • @@ -4801,7 +4820,7 @@
  • 已添加对参数信息的支持
  • 文档 - +
  • 我们为所有未注明的编译器错误添加(生成)了主题。有些主题只包含编译器显示的文本。更多文档将陆续发布。此外,我们还为 X# 脚本添加了一些文档。
  • @@ -4809,40 +4828,40 @@ Changes in 0.2.11 编译器 所有方言 - +
  • 改进了某些错误信息,例如未终止字符串的错误信息
  • 已添加对 /s(仅限语法检查)命令行选项的支持
  • 已添加对 /parseonly 命令行选项的支持,该选项用于intellisense解析器
  • - +
  • 针对无效代码添加了一些编译器错误和警告
  • 预处理器没有正确处理 #command 和 #translate 的 4 个字母缩写。现已修复
  • 修正了预处理器中发现的一些问题
  • 我们改用了新的 Antlr 解析器运行时。这样性能应该会略有提高。
  • 更改了字面字符和字符串的定义方式:
  • - +
  • 在 Vulcan 方言中,用单引号括起来的字面字符串是 Char 字面量。双引号是 String 字面量
  • 在 Core 和 VO 方言中,用单引号括起来的字面字符串就是 String 字面量。双引号也是 String 字面量。
    要在 Core 和 VO 中指定 Char 字面量,需要在字面量前加上 “c”:
  •      LOCAL cChar as CHAR
         cChar := c'A'
    - +
  • 更改了字面字符和字符串的定义方式:
  • 在为 x86 或 x64 编译时,sizeof() 和 _sizeof() 不再产生需要 “不安全 ”代码的警告。但在为 AnyCpu 编译时,仍会产生警告。
  • 如果未设置 includedir 环境变量,则也无法自动找到 XSharp\Include 文件夹。
  • VO/Vulcan 兼容性 - +
  • 已添加 /vo16 编译器选项,以便为没有构造函数的类自动生成带有 Clipper 调用约定的构造函数
  • Harbour 兼容性 - +
  • 开始编写 Harbour 方言。这与 VO/Vulcan 方言完全相同。目前唯一的区别是,IIF() 表达式是可选的
  • Visual Studio 新特性 / 更改的行为: - +
  • 新增括号匹配功能
  • 添加了速览定义(Alt-F12)
  • 所有关键字不会自动成为完成列表的一部分
  • @@ -4854,12 +4873,12 @@
  • 当 X# 语言缓冲区被输入 C# 代码等 “垃圾 ”时,防止程序崩溃
  • 安装 - +
  • VS2017 的本地模板缓存和组件缓存未正确清除,现已修复。
  • 已添加代码,以便在安装时正确取消注册现有的 CodeDomProvider
  • 文档 - +
  • 现在隐藏了几个空章节。
  • 添加了模板说明
  • @@ -4869,7 +4888,7 @@ 该版本重点解决了 VO 和 Vulcan 兼容性方面的最后遗留问题,并为 Visual Studio 集成添加了大量新功能。 编译器 VO/Vulcan 兼容性 - +
  • 我们已完成对 DEFINE 关键字的支持。类型子句现在是可选的。如果未指定类型,编译器将找出定义的类型。
    如果在编译时无法确定表达式(例如字面日期或符号),DEFINE 将被编译为函数类的常量字段或只读静态字段。
  • 我们扩展了预处理器 。它现在支持 #command、#translate、#xcommand 和 #xtranslate。此外,还支持 “伪函数” 定义,如 :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    其工作原理与 #xtranslate 相同,但定义是区分大小写的(除非启用了 “VO 兼容预处理器 ”选项 (/vo8).
    预处理器中唯一不起作用的是重复结果标记
  • 在 VO/Vulcan 模式下,编译器现在可以接受ENDIF 和 NEXT 等关键字与语句结尾之间的 “垃圾”,就像 VO 编译器一样。
    因此,您不必再删除 NEXT 或 ENDIF 之后的 “注释 ”标记。这将在不更改 VO 和 Vulcan 方言的情况下进行编译:

      IF X == Y
          DoSomething()
      ENDIF X == Y

      FOR I := 1 to 10
         DoSomething()
      NEXT I
    我们不推荐这种编码方式,但这种代码非常常见...
  • @@ -4877,12 +4896,12 @@
  • 在 VO 和 Vulcan 方言中,当使用编译器选项 /vo1 时,Init() 和 Axit() 方法允许使用不带值或返回值为 SELF 的 RETURN 语句。其他返回值将触发编译器警告并被忽略。
  • 新特性 / 更改的行为: - +
  • 编译器现在在源文件以未终止的多行注释结尾时会产生错误。
  • 添加了 ASTYPE 表达式,类似于其他语言中的 AS 结构。这将分配一个正确类型的值,如果表达式的类型不正确,则分配 NULL:
  • VAR someVariable := <AnExpression> ASTYPE <SomeType>
    - +
  • 如果参数是编译时常数,Chr() 和 _Chr() 函数现在会转换为字符串或字符字面量
  • 对于包含大量函数、过程、定义、全局或 _dll 函数的程序集,编译速度有所提高。
  • _DLL 函数现在会自动标记为 CharSet.Auto
  • @@ -4891,10 +4910,10 @@
    Visual Studio 新特性 / 更改的行为: - +
  • 经测试可与 Visual Studio 2017 发布版本一起使用
  • - +
  • 我们在 VS 编辑器中添加了对区域的支持。目前,大多数 “实体 ”以及语句块、区域和使用列表、#includes 和注释都是可折叠的。
  • 我们在 VS 编辑器中添加了对成员和类型下拉菜单的支持
  • 我们在 VS 编辑器中添加了对代码自动补全的支持
  • @@ -4903,7 +4922,7 @@
  • 我们为 VS 错误列表中的错误添加了帮助链接。帮助链接将带您进入 X# 网站上的相应页面。虽然不是所有的帮助页面都已完成,但至少基础架构已经正常运行。
  • 我们增加了对代码片段的支持,并在安装程序中加入了多个代码片段
  • 我们对项目属性对话框做了几处修改
  • - +
  • 生成前和生成后事件现在位于 “项目属性 ”的单独页面上。这些事件现在也不是按配置定义的,而是在不同配置之间共享。
    如果要将输出结果复制到不同配置的不同文件夹中,应使用 $(Configuration) 和 $(Platform) 变量
  • 我们已将 Platform 和 Prefer32Bits 属性移至 “生成” 页面,使其取决于配置
  • 修正了 AnyCPU 平台大小写的一个问题,该问题会导致 VS 平台组合框中出现重复项目
  • @@ -4912,24 +4931,24 @@
  • 我们添加了一个项目属性,用于控制托管文件资源的包含方式:  使用与 Vulcan 兼容的托管资源
    如果为 “True”,则资源文件包含在程序集中,不带命名空间前缀。当 “False ”时,资源文件将以应用程序的命名空间作为前缀,就像其他 .Net 语言(如 C#)一样。
  • - +
  • 我们更正了一些代码生成问题
  • Windows 窗体编辑器中使用的解析器现在也能正确处理背景图片。无论是表单 resx 中的图像,还是共享项目资源中的背景图像
  • 我们为项目系统添加了 Nuget 支持。
  • 我们做了几处修改,以修复项目文件中的问题
  • - +
  • 项目系统现在可静默修复重复项目问题
  • 修正了 xaml 文件与其依赖的 designer.prg 文件和其他依赖文件之间的依赖关系问题
  • 修正了子文件夹或文件夹树中包含点的文件夹名称中的从属项的问题。
  • 修正了 WPF 模板中的一个问题
  • - +
  • 修复了删除引用节点时的刷新问题
  • 添加了 JetBrains 使用的 OAProject.Imports 属性的实现
  • XPorter - +
  • 修复了一个转换 WPF 风格项目的问题
  • @@ -4940,10 +4959,10 @@ 根据编译器的当前状态,我们认为编译器的 Vulcan 兼容性已经完成。现在,所有 Vulcan 代码的编译都不会出现问题。 VO/Vulcan 兼容性 新特性 / 更改的行为: - +
  • 现在,所有 Init 程序都能在启动时正确调用。因此,不仅是 VOSDK 库中的 Init 程序,其他库中的 init 程序和主 exe 程序也会被正确调用。
  • 更改了方法和类型解析代码:
  • - +
  • 现在,带单一 object 参数的方法比带 Object[] 参数的方法更受青睐
  • 当一个函数(静态方法)和一个实例方法同时存在时,我们现在会在方法内部的代码中调用静态方法,而不会使用 SELF: 或 SUPER: 前缀。
  • 在使用 @ 操作符通过引用传递变量的情况下。
  • @@ -4954,12 +4973,12 @@
  • 当在引用程序集中检测到 2 个相同的函数或类型时,我们现在会像 Vulcan 一样选择第一个引用程序集中的函数或类型,并生成警告 9043
  • - +
  • sizeof 操作符现在返回 DWORD,以便与 VO 和 Vulcan 兼容。
  • 新增了对 EXIT PROCEDURES(PROCEDURE MyProcedure EXIT)的支持。这些程序将在程序关闭时自动调用,就在所有全局变量被清除之前。
    现在,编译器会为每个程序集生成一个 $Exit 函数,调用其中的退出程序,并清除程序集中的全局引用。在主程序中创建的 $AppExit() 函数将调用所有引用 X# 程序集中的 $Exit 函数。当引用 Vulcan 编译的程序集时,所有公共全局引用将从 $AppExit() 函数中清除。
  • 添加了对 PCALL PCALLNATIVE 的支持
  • 添加了对多个 Vulcan 兼容编译器选项的支持:
  • - +
  • /vo1 允许在构造函数和销毁函数中使用 Init() 和 Axit() 函数
  • /vo6 允许(全局)函数指针。DotNet 不 “认识 ”这些指针。它们被编译为 IntPtr。函数信息将被保留,因此您可以在 PCALL() 中使用这些指针。
  • /ppo 将预处理后的编译器输出保存到文件中
  • @@ -4971,15 +4990,15 @@
  • WAIT 命令
  • - +
  • 若干代码生成变更:
  • - +
  • 更改了 VOStruct 数组内 DIM 元素的代码生成,因为 Vulcan 编译器依赖于特定的命名方案,无法识别我们的名称。
  • 改进了使用 CLIPPER 调用约定的方法内部代码生成。
  • Bug 修复 - +
  • 现在,只有启用 /ins 编译器选项时,才会使用隐式命名空间。在 Vulcan 方言中,命名空间 Vulcan 总是包含在内。
  • 修正了 @ 操作符和 VOSTRUCT 类型的几个问题
  • 修复了 VOSTRUCT 类型的 DIM 数组的一个问题
  • @@ -4999,15 +5018,15 @@
    所有方言 新特性 / 更改的行为: - +
  • 对代码生成进行了多项修改:
  • - +
  • ACCESS 和 ASSIGN 的代码生成已发生变化。类中不再有单独的方法,但这些方法的内容现在已内联到生成属性的 Get 和 Set 方法中。
  • 优化了 IIF 语句的代码生成。
  • 调试器/步骤信息已得到改进。调试器现在也应在 IF 语句、FOR 语句、CASE 语句等语句时停止。
  • - +
  • 对使用 SELF 关键字定义的属性的索引访问现在也可以使用 “Index”属性名了
  • 暂时不允许使用类内函数和过程
  • ASSIGN 方法内的 RETURN <LiteralValue> 将不再分配变量并产生警告
  • @@ -5015,7 +5034,7 @@
    您可以看到,Visual Studio 语言支持还识别出 INTERFACE 和 OPERATOR 在此上下文中不作为关键字使用 Bug 修复 - +
  • 修正了 REPEAT UNTIL 语句的一个问题
  • 修正了包含 DO CASE 但没有匹配 END CASE 的代码崩溃问题
  • 修正了 _DLL FUNCTION 和 _DLL PROCEDURE 代码生成中的几个问题
  • @@ -5036,7 +5055,7 @@
  • 还有很多修复
  • Visual Studio 集成 - +
  • 在用户界面和生成系统中添加了对所有编译器选项的支持
  • 修复了子文件夹中依赖文件项的问题
  • 优化编译器选项不起作用
  • @@ -5048,7 +5067,7 @@
    文档 - +
  • 我们在命令行选项中增加了许多描述
  • 我们添加了最常见的编译器错误和警告
  • @@ -5057,7 +5076,7 @@ Changes in 0.2.8 编译器 VO/Vulcan 兼容性 - +
  • 默认参数现在可以像 VO 和 Vulcan 一样处理。这意味着您也可以将日期常量、符号常量等作为默认参数
  • 字符串 “单个等号” 规则现在与 “可视对象” 100% 相同。我们发现有一种情况,Vulcan 返回的结果与 Visual Objects 不一致。我们选择与 VO 兼容。
  • 在 VO/Vulcan 模式下编译时,将自动调用 VO SDK 库中的启动程序。您不必再在代码中调用这些程序。 此外,主程序集中的初始程序也会在启动时被调用。
  • @@ -5072,7 +5091,7 @@
  • 修正了几个数字转换问题
  • 新特性 - +
  • 我们添加了对集合初始化Object 初始化程序的支持
  • 匿名类型成员不再需要命名。如果选择一个属性作为匿名类型成员,那么匿名类型也将使用相同的属性名称。
  • 缺失的结束关键字(如 NEXT、ENDIF、ENDCASE 和 ENDDO)现在会产生更好的错误信息
  • @@ -5080,7 +5099,7 @@
    FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    我们确实不鼓励隐藏赋值操作,但如果您确实使用了这种编码风格,它现在可以正常工作<g>。 - +
  • 现在允许将 AS VOID 作为 PROCEDURE 的(唯一)类型规范
  • 我们在 exe 中为共享编译器添加了一个 .config 文件,它应该能让编译器运行得更快。
  • 现在,编译时会自动包含 XSharp 中的 XSharpStdDefs.xh 文件。该文件暂时声明了 CRLF 常量。
  • @@ -5090,7 +5109,7 @@
  • 改进了意外标记的编译器错误信息
  • Bug 修复 - +
  • 编译器没有正确处理几个带减号的命令行选项
  • 修复了与向后期绑定的属性分配 NULL_OBJECT 或 NULL 有关的若干崩溃问题
  • 分部类不再需要在每个源代码位置指定父类型。当然,指定时父类型必须相同。类实现的父接口也可以分布在多个位置上
  • @@ -5103,22 +5122,22 @@
    Visual Studio 集成 我们更改了错误列表和输出窗口的更新方式。在以前的版本中,输出窗口中可能会缺少某些行,而且错误代码列是空的。现在应该可以正常工作了。 - +
  • 我们从其他一些基于 MPF 的项目系统中合并了一些代码,如 WIX(称为 Votive)、NodeJS 和 Python(PTVS),以帮助扩展我们的项目系统。因此
  • - +
  • 我们的项目系统现在支持链接文件
  • 我们的项目系统现在支持 “显示所有文件”,您现在可以包含和排除文件。该设置会保存在 .user 文件中,因此您可以根据需要将其从 SCC 中排除。
  • 我们做了一些更改,以更好地支持 “拖放 ”功能
  • - +
  • 我们更正了几个与从属项目有关的问题
  • 在包含表单或用户控件的文件中加入表单或用户控件时,现在可以识别这些表单或控件,并在项目文件中设置相应的子类型,这样就可以打开窗口表单编辑器了
  • 我们现在支持为 .Settings 和 .Resx 文件生成源代码。
  • 托管资源编辑器和托管设置工具中可在内部代码和公共代码之间进行选择的组合框现已启用。在组合框中选择不同的值将改变文件属性中的工具。
  • 编译器和本地资源编译器的最后响应文件现在保存在用户 Temp 文件夹中,以帮助调试问题。
  • - +
  • 现在,响应文件将每个编译器选项都放在新的一行,以便在必要时更容易阅读和调试。
  • 代码生成现在保留了实体(方法)之间的注释
  • 我们修复了模板中的几个小问题
  • @@ -5131,13 +5150,13 @@ Changes in 0.2.7.1 编译器 - +
  • 编译器不接受 AssemblyFileVersion 属性和 AssemblyInformationVersion 属性的通配符字符串。现已修复
  • 无法识别 #Pragma 命令 #Pragma Warnings(Push) 和 #Pragma Warnings(Pop)。现已修复。
  • 编译器无法识别 global::System.String.Compare(..) 这样的表达式。现已修复
  • Visual Studio 集成 - +
  • 无法正确识别项目子文件夹中的从属项目,打开项目时可能会出错
  • 修复了 VulcanApp 模板中的一个问题
  • Windows 窗体编辑器无法打开没有 begin namespace ... end namespace 的文件中的窗体。现已修复
  • @@ -5150,7 +5169,7 @@
  • 在属性窗口中添加了 “Copy to Output Directory(复制到输出目录)” 属性
  • 安装 - +
  • 现在,installer.exe 文件和文档都有证书签名
  • @@ -5158,7 +5177,7 @@ Changes in 0.2.7 编译器 新特性: - +
  • 已添加对 VOSTRUCT 和 UNION 类型的支持
  • 添加了对作为数值的类型的支持,例如在构造
    IF UsualType(uValue) == LONG
  • 为变量添加了 FIXED 语句和 FIXED 修饰符
  • @@ -5169,14 +5188,14 @@
  • FOX 订阅版本的编译器现在以 Release 模式发布,速度更快。此外,还安装了调试版本的编译器,以便在需要时帮助查找编译器问题。
  • 更改的行为 - +
  • 编译器为 Core 方言生成的 Globals 类现在称为 Functions,而不再是 Xs$Globals。
  • 现在,重载 VulcanRTFuncs 中的函数无需指定命名空间:
    当编译器找到两个候选函数,其中一个在 VulcanRTFuncs 中,那么就会选择不在 VulcanRTFuncs 中的函数。
  • 现在,VO/Vulcan 方言的 9001 号警告(隐含不安全修饰符)已被抑制。不过,如果编译不安全代码,必须通过 /unsafe 编译器选项!
  • 改进了编译器发布模式的错误信息
  • Bug 修复 - +
  • Switch 语句中的 RETURN 和 THROW 语句会产生 “代码不可达” 警告。现已修复
  • 修复了有符号和无符号数组索引混合使用时的几个问题
  • 修正了 FOR ... NEXT 语句的几个问题。现在,“To ”表达式将在循环的每次迭代中进行计算,就像在 VO 和 Vulcan 中一样。
  • @@ -5185,7 +5204,7 @@
  • 修正了静态函数内静态变量的可见性问题
  • Visual Studio 集成 - +
  • 修正了在同一个 Visual Studio 中使用 XSharp 和 Vulcan.NET,以及从输出窗口或查找结果窗口打开文件时选择了错误的语言服务的问题
  • 修正了生成代码中 “异常” 行尾的一些问题
  • 修正了类库模板中的一个问题
  • @@ -5194,7 +5213,7 @@ Changes in 0.2.6 编译器 - +
  • 已添加事件定义的替代语法。请参阅文档中的 EVENT 关键字
  • 增加了代码块支持
  • 实现了 /vo13(兼容 VO 的字符串比较)
  • @@ -5212,7 +5231,7 @@
  • 修正了使用括号或方括号定义但不带实际参数的属性的崩溃问题
  • Visual Studio 集成 - +
  • 完成对 Windows.Forms 的 .designer.prg 支持
  • 修复了 CodeDom 生成器在为服务生成包装器时的一个问题
  • XSharp语言服务将不再用于Vulcan PRG文件的Side by Side安装。
  • @@ -5222,11 +5241,11 @@ Changes in 0.2.51 Visual Studio 集成 & 生成系统 - +
  • 本地资源编译器现在能 “找到 ”头文件,如 Vulcan.NET include 文件夹中的 “VOWin32APILibrary.vh”。此外,在 “正常 ”信息模式下运行时,资源编译器的输出现在不再那么冗长。在 “详细 ”或 “诊断 ”模式下运行时,输出现在也包括资源编译器的冗长输出。
  • 编译器 - +
  • 修正了一个会导致 PDB 文件无法使用的问题
  • "重复定义但值不同“(9012)的错误已改为警告,因为我们的预处理器进行文本比较时,并没有  ”看到“ ”10 “ 和 ”(10)“ 以及 ”0xA“ 和 ”0xa" 是相同的。当然,您有责任确保这些值确实相同。
  • 指数 REAL 常量只能使用小写字母 “e”。现在不区分大小写了
  • @@ -5236,7 +5255,7 @@ Changes in 0.2.5 Visual Studio 集成 - +
  • 修正了为 WPF 生成时输出文件名包含管道符号的问题
  • 修复了 WPF 表单、页面和用户控件的项目类型问题
  • 安装程序现在可以选择不从已安装的 Vulcan 项目系统中删除 PRG、VH 和 PPO 项目的关联。
  • @@ -5245,40 +5264,40 @@
  • 为 WPF、RC、ResX、设置、位图、光标等添加了多个项目模板。
  • 生成系统 - +
  • 添加了对新的 /vo15 命令行开关的支持。
  • 添加了对编译本地资源的支持。
  • 编译器 - +
  • 使用 VO/Vulcan 方言编译时,现在必须引用 VulcanRT 和 VulcanRTFuncs。
  • 为 VO/Vulcan 数组的索引访问添加了支持
  • 已添加对 VO/Vulcan 风格构造器链的支持(其中 SUPER() 或 SELF() 调用不是构造器主体内的第一次调用)
  • 在 VO/Vulcan 方言中添加了对 &() 宏操作符的支持
  • 在 VO/Vulcan 方言中添加了对 FIELD 语句的支持
  • - - + +
  • 该语句被编译器识别
  • FIELD 语句中列出的字段现在优先于同名的局部变量或实例变量
  • - +
  • 在 VO/Vulcan 方言中添加了对 ALIAS 操作符 (->) 的支持,但别名表达式 (AREA->(<Expression>) 除外。)
  • 已添加对后期绑定代码的支持(在 VO/Vulcan 方言中)
  • - - + +
  • 后期绑定方法调用
  • 后期绑定属性 get
  • 后期绑定属性 set
  • 后期绑定的委托调用
  • - +
  • 新增了 /vo15 命令行选项(允许未类型化的局部变量和返回类型):
    默认情况下,VO/Vulcan 方言允许缺失类型,并用 USUAL 类型替换。
    如果指定 /vo15-,则不允许使用未类型化的 locals 和返回类型,必须指定它们。
    当然,您也可以将它们指定为 USUAL
  • - +
  • 在为 VO/Vulcan 方言编译时,? 和 ?? 语句现在可直接映射到相应的 VO/Vulcan 运行时函数。
  • 我们现在还支持 VO 和 Vulcan 方言的 VulcanClassLibrary 属性和 VulcanCompilerVersion 属性。
    有了这种支持,Vulcan 宏编译器和 Vulcan Runtime 应该能够找到我们的函数和类
  • 现在,生成的静态类名称与 VO & Vulcan 方言中 Vulcan 生成的类名称更加一致。
  • @@ -5288,43 +5307,43 @@
  • 修正了区分大小写的命名空间比较的一个问题
  • 修正了 operator 方法中的一个问题
  • - +
  • 添加了预处理器宏 __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ 和 __DIALECT_VULCAN__
  • _Chr() 伪函数现在将被映射为 Chr() 函数
  • - +
  • 已添加对参数列表中缺少参数的支持(仅限 VO 和 Vulcan 方言)
  • 修正了计算头文件中标记位置时的崩溃问题
  • 现在,安装程序会将 Vulcan 头文件复制到 XSharp Include 文件夹中
  • 已添加在 (VO) 字面数组构造函数中跳过参数的支持
  • 文档 - +
  • 在 Visual Studio 帮助集中添加了 XSharp 文档
  • 已添加 Vulcan 运行时参考文档
  • Changes in 0.2.4 Visual Studio 集成 - +
  • 双击错误浏览器中的错误现在可以正确打开源文件并定位光标
  • 修正了项目和项目模板中的几个问题
  • 现在,安装程序还会检测 Visual Studio 15 预览版,并在此环境中安装我们的项目系统。
  • 生成 - +
  • 修正了 /unsafe 编译器选项的一个问题
  • 修正了 /doc 编译器选项的一个问题
  • 总是将警告视为错误。现已修复。
  • 编译器 - +
  • 已添加对带有表达式列表的 Lambda 表达式的支持
  • LOCAL dfunc AS System.Func<Double,Double> dfunc := {|x| x := x + 10, x^2} ? dfunc(2) - +
  • 已添加对带有语句列表的 Lambda 表达式的支持
  • LOCAL dfunc AS System.Func<Double,Double> @@ -5332,7 +5351,7 @@ ? 'square of', x RETURN x^2 } - +
  • 添加了对 NAMEOF 固有函数的支持
  • FUNCTION Test(cFirstName AS STRING) AS VOID @@ -5340,7 +5359,7 @@ IF String.IsNullOrEmpty(cFirstName) THROW ArgumentException{"Empty argument", nameof(cFirstName)} ENDIF - +
  • 已添加对使用 Clipper 调用约定创建方法和函数的支持(仅限 VO 和 Vulcan 方言)
  • Using 语句现在可以包含变量声明:
  • @@ -5354,11 +5373,11 @@ BEGIN USING VAR ms := System.IO.MemoryStream{} // do the work END USING - +
  • 已添加对 /vo10(兼容 IIF 行为)的支持。在 VO 和 Vulcan 方言中,表达式被转换为 USUAL。在 Core 方言中,表达式被转换为 OBJECT。
  • VO 和 Vulcan 方言的新语言特性 - +
  • 现在允许在构造函数的任何位置调用 SELF() 或 SUPER() 构造函数(仅限 VO 和 Vulcan 方言)。Core 方言仍要求将构造函数链作为构造函数主体内的第一个表达式
  • 已添加对 PCOUNT、_GETFPARAM 和 _GETMPARAM 固有函数的支持
  • 已添加对 String2Psz() 和 Cast2Psz() 的支持
  • @@ -5366,7 +5385,7 @@
  • 增加了对 BREAK 的支持
  • 已修复的问题: - +
  • 嵌套的数组初始化器
  • BREAK 语句的崩溃
  • 泛型参数的 Assertion 错误
  • @@ -5378,7 +5397,7 @@ Changes in 0.2.3 Visual Studio 集成 - +
  • 我们已改为使用 Visual Studio Integration 的 MPF 风格。
  • 我们增加了对 Windows 窗体编辑器的支持
  • 我们增加了对 WPF 编辑器的支持
  • @@ -5387,15 +5406,15 @@
  • 我们添加了几个模板
  • 生成系统 - +
  • 新增了对多个命令行选项的支持,如 /dialect
  • 运行共享编译器时,命令行选项未正确重置。这一问题已得到修复。
  • - +
  • 生成系统会将传给 Visual Studio 的错误数量限制为每个项目最多 500 个。命令行编译器仍会显示所有错误。
  • 编译器 - +
  • 我们已开始为 Vulcan 提供自带运行时支持。请参见下面的单独标题。
  • 现在还支持 __SIG__ 和 __ENTITY__ 宏,以及 __WINDIR__ 、 __SYSDIR__ 和 __WINDRIVE__ 宏。
  • 调试器说明已得到改进。使用此版本,你将获得更好的调试体验
  • @@ -5408,7 +5427,7 @@
  • 修正了 DYNAMIC 类型的一个问题。
  • BYOR - +
  • 正确解析 XBase 类型名称(ARRAY、DATE、SYMBOL、USUAL 等)
  • 现在可正确解决字面值问题(ARRAY、DATE、SYMBOL)
  • NULL_ 字面已正确解析(NULL_STRING 遵循 /vo2 编译器选项、NULL_DATE、NULL_SYMBOL)。
  • @@ -5424,7 +5443,7 @@ Changes in 0.2.2 Visual Studio 集成 - +
  • 添加了更多项目属性。其中一个新属性是 “使用共享编译器” 选项。这将提高编译速度,但可能会产生副作用,即某些编译器(解析器)错误不会显示在详细信息中。
    如果您遇到这种情况,请禁用该选项。
  • 为生成系统添加了更多属性。现在,X# 也应支持所有 C# 属性,尽管其中一些在 VS 内部的属性对话框中不可见。
  • 为生成系统添加了 CreateManifest 任务,因此包含托管资源的项目不会再出现错误
  • @@ -5432,7 +5451,7 @@
  • 将文本块标记为注释或取消标记并不总是在编辑器颜色中反应变化。这一问题已得到修复。
  • 编译器 - +
  • 我们添加了第一版预处理器。该预处理器支持 #define 命令、#ifdef、#ifndef、#else、#endif、#include、#error 和 #warning。 目前还不支持 #command 和 #translate(添加用户定义的命令)。
  • 缺少类型(参数列表、字段定义等)有时会产生不明确的错误信息。我们修改了编译器,使其产生 “缺少类型 ”的错误信息。
  • 我们将 Roslyn 的底层代码推进到了 VS 2015 Update 1。虽然从外观上看不出什么变化<g>,但编译器中已经加入了一些修复和增强功能。
  • @@ -5450,14 +5469,14 @@ Changes in 0.2.1 Visual Studio 集成 - +
  • 添加并改进了多个项目属性
  • 修复 “附加编译器选项” 的问题
  • 改进编辑器中关键词、注释等的颜色。你可以在 “工具/选项 ”对话框的 “常规/字体和颜色 ”下设置颜色。查找名称为 “XSharp"( 关键字)的条目。
  • 已添加 Windows 窗体模板
  • 编译器 - +
  • 若干错误已降级为警告,以便与 VO/Vulcan 更好地兼容
  • 添加了对以星号开头的注释行的支持
  • 已添加对 DEFINE 语句的支持。目前,DEFINE 语句的类型必须是
    DEFINE WM_USER := 0x0400 AS DWORD
  • @@ -5466,7 +5485,7 @@
    Changes in 0.1.7 - +
  • "ns"(为没有命名空间的类添加默认命名空间)已经实现
  • 实现了 “vo3” 编译器选项(使所有方法都成为虚方法)。
  • 修正了括号之间表达式的发送操作符编译不正确的问题
  • @@ -5481,7 +5500,7 @@
    Changes in 0.1.6 - +
  • 该版本现在附带安装程序
  • 该版本包含 Visual Studio 集成的第一个版本。您可以在 Visual Studio 中进行编辑、生成、运行和调试。没有 “intellisense ”功能。
  • 编译器现在使用以 1 为基础的数组,“az ”编译器选项可将编译器切换为使用以 0 为基础的数组。
  • @@ -5495,7 +5514,7 @@
    Changes in 0.1.5 - +
  • 当解析阶段出现错误时,X# 将不再进入编译器的后续阶段,以防止崩溃。除了解析器的错误外,还会显示错误 9002。
  • 解析器错误现在也会在错误信息中包含源文件名,并采用与其他错误信息相同的格式。请注意,我们尚未完成对这些错误信息的处理。在即将推出的版本中,这些错误信息的格式将得到改进。
  • 当程序使用 Xbase 类型(ARRAY、DATE、FLOAT、PSZ、SYMBOL、USUAL)之一时,编译器将显示 “功能不可用”(8022)错误。
  • @@ -5504,7 +5523,7 @@
    Changes in 0.1.4 - +
  • 允许使用整数和枚举进行计算的几处更改
  • 为实现与 VO 兼容的 _OR、_AND、_NOT 和 _XOR 操作而做的几处修改
  • 修复 interface/abstract VO 属性
  • @@ -5527,7 +5546,7 @@
    Changes in 0.1.3 - +
  • 将不一致的字段可访问性错误改为警告和其他类似错误
  • 添加了对 Vulcan 参数的命令行支持。除非 Roslyn (C#) 编译器存在等效参数,否则这些参数不会再导致错误信息,但不会真正实现。例如 /ovf 和 /fovf 都被映射到 /checked,/wx 被映射到 /warnaserror 。不应使用 /w,因为其含义与 /warning level(警告级别)不同。而应使用 /nowarn:nnnn
  • 修复了将 PUBLIC 修饰符分配给接口成员或析构函数的问题
  • @@ -5546,7 +5565,7 @@
    Changes in 0.1.2.1 - +
  • 添加了默认表达式
  • 修复了与事件有关的问题
  • 修复了一些小的词法问题
  • @@ -5554,7 +5573,7 @@
    Changes in 0.1.2 - +
  • 修复了处理扩展字符串中转义序列的问题
  • 修复了 FOR... NEXT 语句中的问题
  • 修复了 SWITCH 语句的一个问题
  • From 5b699d989177d490e03dd2baa05b31302506551f Mon Sep 17 00:00:00 2001 From: xinjie <38008973+vfp9@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:43:52 +0800 Subject: [PATCH 2/4] Update Chinese version history with latest changes Revised and expanded the 2.24.0.1 version history in the Chinese documentation. Improvements include more precise terminology, added issue links, corrections to feature and bug descriptions, and additional XIDE enhancements. Updated metadata for modification date and editor. --- docs/Help_ZH-CN/Topics/VersionHistory.xml | 51 +++++++++++++---------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/docs/Help_ZH-CN/Topics/VersionHistory.xml b/docs/Help_ZH-CN/Topics/VersionHistory.xml index 160b06efea..2b20dbe731 100644 --- a/docs/Help_ZH-CN/Topics/VersionHistory.xml +++ b/docs/Help_ZH-CN/Topics/VersionHistory.xml @@ -1,6 +1,6 @@  - + 版本历史 Changes @@ -14,54 +14,61 @@ 您可以访问 https://github.com/X-Sharp/XSharpPublic/issues/nnn 其中 nnnn 是票据编号。 如果您在 X# 中发现问题,我们建议您在 GitHub 上报告。我们会通知您问题的处理进度。 Changes in 2.24.0.1 - 编译器
    错误修复
    + 编译器
    Bug修复
    -
  • 为不带可见性修饰符的成员的 VFP 类生成文档的功能失效(#1664)
  • +
  • 为不带可见性修饰符的 VFP 类成员生成文档的功能失效(#1664)
  • -
  • 修正了默认参数值的类型与参数类型不匹配的问题。例如,为十进制参数使用长默认值 (#1733)
  • +
  • 修正了默认参数值的类型与参数类型不匹配的问题。例如,为十进制参数使用Long默认值 (#1733)
  • - 构建系统
    错误修复
    + 生成系统
    Bug修复
  • WriteCodeFragment 任务现在可以像 C# 编译系统一样,正确支持 _Parameter1 和 _Parameter2 等参数。
  • - 运行时间
    错误修复
    + 运行时
    Bug修复
    -
  • 修正了对重载方法的后期绑定调用问题 (#1696)
  • +
  • 修正了对重载方法的后期绑定调用问题 (#1696)
  • -
  • 修正了 GoMonth() 函数(VFP 方言)的模糊调用错误问题 (#1724)
  • -
  • 修正了使用 VIA 子句时 COPY TO 命令的问题 (#1726)
  • +
  • 修正了 GoMonth() 函数(VFP 方言)的模糊调用错误问题 (#1724)
  • +
  • 修正了使用 VIA 子句时 COPY TO 命令的问题 (#1726)
  • - Visual Studio 集成
    错误修复
    + Visual Studio 集成
    Bug修复
  • 从项目中删除文件时,该文件不会从 intellisense 数据库中删除。这一问题已得到修复。
  • -
  • Goto 定义不再包括构建行为为 "无 "的 prg 文件的源代码 (#1630)
  • -
  • 对于没有可见性修饰符的字段,Intellisense 无法显示 VFP 类中的字段(#1725)
  • -
  • ToggleLineComment 和 ToggleBlockComment 函数未正确保持前导空白 (#1728)
  • -
  • 修复了装配自定义属性的代码生成问题
  • +
  • Goto 定义不再包括 BuildAction 文件属性设置为 "None"的 prg 文件的源代码 (#1630)
  • +
  • 对于没有可见性修饰符的字段,Intellisense 无法显示 VFP 类中的字段(#1725)
  • +
  • ToggleLineComment 和 ToggleBlockComment 函数未正确保持前导空白 (#1728)
  • +
  • 修复了 AssemblyCustomAttributes 的代码生成问题
  • 修复了 VS 2017 和 VS 2019 中调试器表达式评估器的一个问题
  • - 新功能 + 新特性 -
  • 添加了从现有 VO 表单生成 Windows 窗体表单的上下文菜单选项 (#1366)
  • -
  • 代码生成器现在可自动生成END CONSTRUCTOR、END METHOD 等。
  • +
  • 添加了从现有 VO 表单生成 Windows 窗体表单的上下文菜单选项 (#1366)
  • +
  • 代码生成器现在可自动生成 END CONSTRUCTOR、END METHOD 等代码。
  • VOXporter - 新功能 + 新特性 -
  • 添加特殊标记 "VXP-NOCHANGE"、"{VOXP:NOCHANGE}",指示 VOXporter 完全不修改模块/prg 文件中的代码 (#1723))
  • +
  • 添加特殊标记 "VXP-NOCHANGE"、"{VOXP:NOCHANGE}",指示 VOXporter 完全不修改模块/prg 文件中的代码 (#1723)
  • XIDE - 一般情况 + 常规 -
  • 添加了 "查看->隐藏侧窗格"(SHIFT+F4)选项,可在集成开发环境中快速显示/隐藏左/右窗格
  • -
  • 启用调试->查看 DB 工作区调试窗口
  • +
  • 添加了 "查看->隐藏侧边栏"(SHIFT+F4)选项,可在集成开发环境中快速显示/隐藏左/右边栏
  • +
  • 启用"调试->查看 DB 工作区"调试窗口
  • 修复了在未使用图库模板时新应用程序默认为 CLR2 的问题
  • 为应用程序属性窗口中的 "要运行的应用程序 "选项添加了文件夹按钮
  • 添加了几个 "每日提示 "项目
  • +
  • ·新增“首选项/突出显示活动文件标题”选项
  • +
  • ·新增“首选项/按应用程序绘制文件标题”选项
  • +
  • ·在“文件->导航”菜单项中添加了键盘快捷键信息
  • +
  • ·在工具窗口的选项卡页面上下文菜单中添加了“停靠到窗格”选项
  • +
  • ·在编辑器文件的主 IDE 窗口上下文菜单中添加了“分离/连接”选项
  • +
  • ·在浮动窗口中的文件也添加了常规上下文菜单选项
  • +
  • ·工具窗口现在也可以通过中间鼠标按钮点击关闭
  • Changes in 2.23.0.2 编译器 From 5bda727564a6e88055d9904951f107b34538ad04 Mon Sep 17 00:00:00 2001 From: xinjie <38008973+vfp9@users.noreply.github.com> Date: Tue, 22 Jul 2025 12:34:05 +0800 Subject: [PATCH 3/4] [DOCC]Update FoxPro dialect and namespace option docs Clarified references to 'Custom' class in FoxPro dialect section and improved description of the 'ns' compiler option by adding a topic link. These changes enhance accuracy and navigation in the version history documentation. --- docs/Help_ZH-CN/Topics/VersionHistory.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Help_ZH-CN/Topics/VersionHistory.xml b/docs/Help_ZH-CN/Topics/VersionHistory.xml index 2b20dbe731..0d65c2c4bc 100644 --- a/docs/Help_ZH-CN/Topics/VersionHistory.xml +++ b/docs/Help_ZH-CN/Topics/VersionHistory.xml @@ -1,6 +1,6 @@  - + 版本历史 Changes @@ -329,13 +329,13 @@ 这通常会导致与之前相同的编译结果。你可能看到的唯一区别是,当你用此版本打开项目文件时,文件会自动更新。 FoxPro 方言 - 到目前为止,DEFINE CLASS 语法不仅可用于创建继承自 FoxPro 兼容自定义类的类,还可用于创建继承自其他 .Net 类的类。事实证明这有点复杂。 + 到目前为止,DEFINE CLASS 语法不仅可用于创建继承自 FoxPro 兼容 Custom 类的类,还可用于创建继承自其他 .Net 类的类。事实证明这有点复杂。 此外,还有一个 /fox1 编译器选项,可使 DEFINE CLASS 命令中的 AS ParentClass 子句成为可选项。没有 AS ParentClass 的类将自动从自定义类继承。 我们做了以下更改:
  • AS BaseType 子句将像在 Visual FoxPro 中一样是强制性的
  • -
  • ParentType 必须是自定义或从自定义派生的类。
  • +
  • ParentType 必须是 Custom 类或从 Custom 类派生的类。
  • /fox1 编译器现已过时
  • @@ -5524,7 +5524,7 @@ Changes in 0.1.7 -
  • "ns"(为没有命名空间的类添加默认命名空间)已经实现
  • +
  • "ns"(为没有命名空间的类添加默认命名空间)已经实现
  • 实现了 “vo3” 编译器选项(使所有方法都成为虚方法)。
  • 修正了括号之间表达式的发送操作符编译不正确的问题
  • 现在支持字符串的关系运算符(>, >=, <, <=)。它们使用 String.Compare() 方法实现。
  • From fac972e334bcb27c1fedadf5babc5164c9e2a259 Mon Sep 17 00:00:00 2001 From: xinjie <38008973+vfp9@users.noreply.github.com> Date: Tue, 6 Jan 2026 07:48:09 +0800 Subject: [PATCH 4/4] [DOCC]Add RECORD modifier documentation to Chinese help Introduced a new topic for the RECORD modifier in the Chinese documentation, updated the table of contents, and referenced RECORD in user-defined types, CLASS, and STRUCTURE topics. Also corrected attribute names in the opt-ins documentation. --- docs/Help/Topics/RECORD-statement.xml | 2 +- docs/Help_ZH-CN/Maps/table_of_contents.xml | 3 +++ docs/Help_ZH-CN/Topics/RECORD-statement.xml | 17 +++++++++++++++++ docs/Help_ZH-CN/Topics/User-defined-Types.xml | 12 ++++++++++-- docs/Help_ZH-CN/Topics/command_CLASS.xml | 6 +++--- docs/Help_ZH-CN/Topics/command_STRUCTURE.xml | 5 +++-- docs/Help_ZH-CN/Topics/opt-ins.xml | 6 +++--- 7 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 docs/Help_ZH-CN/Topics/RECORD-statement.xml diff --git a/docs/Help/Topics/RECORD-statement.xml b/docs/Help/Topics/RECORD-statement.xml index 9304246c2b..bb82e7e3a0 100644 --- a/docs/Help/Topics/RECORD-statement.xml +++ b/docs/Help/Topics/RECORD-statement.xml @@ -1,6 +1,6 @@  - + RECORD modifier
    diff --git a/docs/Help_ZH-CN/Maps/table_of_contents.xml b/docs/Help_ZH-CN/Maps/table_of_contents.xml index 789641cd82..84f4c4936d 100644 --- a/docs/Help_ZH-CN/Maps/table_of_contents.xml +++ b/docs/Help_ZH-CN/Maps/table_of_contents.xml @@ -1139,6 +1139,9 @@ PROCEDURE 语句 + + RECORD修饰符 + STRUCTURE 语句 diff --git a/docs/Help_ZH-CN/Topics/RECORD-statement.xml b/docs/Help_ZH-CN/Topics/RECORD-statement.xml new file mode 100644 index 0000000000..2fcfcda9a7 --- /dev/null +++ b/docs/Help_ZH-CN/Topics/RECORD-statement.xml @@ -0,0 +1,17 @@ + + + + RECORD修饰符 + +
    + RECORD修饰符 +
    + + 目的 + + Record修饰符(适用于类和结构体)指示编译器创建具有值相等性的特殊版本类型。这些类型通常用于表示数据模型。 + + 当Record类或Record结构体的所有成员都相同时,它们的两个实例将被视为相等。   + 为实现此特性,编译器会为该类型生成一个特殊的Equals()运算符,用于比较类型中的全部字段。 + +
    diff --git a/docs/Help_ZH-CN/Topics/User-defined-Types.xml b/docs/Help_ZH-CN/Topics/User-defined-Types.xml index f1f7f9f0f8..cfae1c6e12 100644 --- a/docs/Help_ZH-CN/Topics/User-defined-Types.xml +++ b/docs/Help_ZH-CN/Topics/User-defined-Types.xml @@ -1,6 +1,6 @@  - + 自定义类型 CLASS @@ -22,7 +22,7 @@ 该语言的以下关键字定义了用户定义的类型。 - +
    + + + +
    类型 @@ -79,6 +79,14 @@ 定义接口。
    + RECORD + + 记录类型是类或结构的一种特殊形式,专用于处理数据模型。记录类型支持值相等性。 +
    STRUCTURE diff --git a/docs/Help_ZH-CN/Topics/command_CLASS.xml b/docs/Help_ZH-CN/Topics/command_CLASS.xml index 2d98a66c94..7b4af76490 100644 --- a/docs/Help_ZH-CN/Topics/command_CLASS.xml +++ b/docs/Help_ZH-CN/Topics/command_CLASS.xml @@ -1,6 +1,6 @@  - + CLASS 语句(所有方言)) Binding of instance variables @@ -39,12 +39,12 @@ 用途 向编译器声明一个类名。 语法 - [Attributes] [Modifiers]  CLASS <idClass> [INHERIT <idClass>]
    [IMPLEMENTS <idInterface>[, <IdInterface2>,..]
    + [Attributes] [Modifiers] [RECORD] CLASS <idClass> [INHERIT <idClass>]
    [IMPLEMENTS <idInterface>[, <IdInterface2>,..]
    [ClassMembers] END CLASS 参数 - + RECORGRecord修饰符定义了一种具有值相等性的特殊结构。相关说明请参见关于记录类型的专题文档。 INHERIT <idClass>现有类(称为超类)的名称,新类从该类继承方法和实例变量(HIDDEN 例外)。 diff --git a/docs/Help_ZH-CN/Topics/command_STRUCTURE.xml b/docs/Help_ZH-CN/Topics/command_STRUCTURE.xml index 2405ca7bdb..f8609e287d 100644 --- a/docs/Help_ZH-CN/Topics/command_STRUCTURE.xml +++ b/docs/Help_ZH-CN/Topics/command_STRUCTURE.xml @@ -1,6 +1,6 @@  - + STRUCTURE 语句 END STRUCTURE @@ -13,11 +13,12 @@ 用途 向编译器声明一个结构名。 语法 - [Attributes] [Modifiers] STRUCTURE <idStructure>
    [IMPLEMENTS <idInterface>[, <IdInterface2>,..]
    + [Attributes] [Modifiers] [RECORD] STRUCTURE <idStructure>
    [IMPLEMENTS <idInterface>[, <IdInterface2>,..]
    [StructureMembers] END STRUCTURE 参数 + RECORDRecord修饰符定义了一种具有值相等性的特殊结构。相关说明请参见关于记录类型的专题文档。 <idStructure>结构的有效标识符名称。 结构是一个实体,因此与其他实体共享相同的名称空间。 这就意味着不可能出现结构和全局变量同名的情况。 IMPLEMENTS <idInterface>该结构实现的接口名称 diff --git a/docs/Help_ZH-CN/Topics/opt-ins.xml b/docs/Help_ZH-CN/Topics/opt-ins.xml index b63ab13dd5..94c947bf92 100644 --- a/docs/Help_ZH-CN/Topics/opt-ins.xml +++ b/docs/Help_ZH-CN/Topics/opt-ins.xml @@ -1,6 +1,6 @@  - + -ins -ins @@ -14,11 +14,11 @@ 语法 -ins[+|-] 参数 - + | - 指定 + 或 -ins,可指示编译器自动包含标有 VulcanImplicitNameSpaceAttribute 的程序集的命名空间。 + + | - 指定 + 或 -ins,可指示编译器自动包含标有 ImplicitNameSpaceAttribute 的程序集的命名空间。 备注 类库可通过特殊属性进行编译: - [assembly: VulcanImplicitNamespaceAttribute( "SomeNameSpace )] + [assembly: ImplicitNamespaceAttribute( "SomeNameSpace )] 该属性告诉编译器,在搜索类时,位于该命名空间内的类应自动包含在内,就像在源代码中使用 #using SomeNameSpace 语句一样。