新的2020 GNAT Ada安装未能建立2015年旧项目

新的2020 GNAT Ada安装未能建立2015年旧项目,ada,gnat,Ada,Gnat,我最近在一台新电脑上安装了GNAT Ada 2020和GNAVI GWindows。 在尝试构建一个在2015版本下开发的旧项目时,我得到了以下信息: 没有与实际情况相匹配的候选解释: 调用中的参数太多,无法放入 应为gwindows绘图中定义的专用类型打印机\画布\类型。ads:603 找到在gwindows绘图中定义的私有类型Canvas_类型。ads:96 这是产生相同结果的几段类似代码中的一段,MapCanvas在其他地方声明为Canvas_类型: Put (MapCanvas

我最近在一台新电脑上安装了GNAT Ada 2020和GNAVI GWindows。 在尝试构建一个在2015版本下开发的旧项目时,我得到了以下信息:

没有与实际情况相匹配的候选解释: 调用中的参数太多,无法放入 应为gwindows绘图中定义的专用类型打印机\画布\类型。ads:603 找到在gwindows绘图中定义的私有类型Canvas_类型。ads:96

这是产生相同结果的几段类似代码中的一段,MapCanvas在其他地方声明为Canvas_类型:

     Put (MapCanvas, (DATUM_BASE_X +
                     (x * 10 * GRID_MONAD_SPACING)) +
                          (5 * GRID_MONAD_SPACING),
                      y - (GRID_MONAD_SPACING + 5),
                      Integer'Image (x));
可能是相关的,我在调用Put-Integer'Imagex的最后一个参数中也得到了这个结果

所需类型为Standard.Wide\u字符串 找到typeStandard.String

作为一个实验,我尝试将最后一个参数using转换为_Wide_String Integer'Image x,但结果是一样的

在其他地方,具有文本的类似代码编译为ok:

     Put (MapCanvas, (DATUM_BASE_X - 1 +
                     (GRID_MONAD_SPACING / 2) +
                     (x * 10 * GRID_MONAD_SPACING)),
                      y + 20 + (60 * GRID_MONAD_SPACING),
                     "0        2        4        6        8       ");
                     
在上一台配备GNAT Ada 2015的PC上,所有内容都已编译。我比较了这些声明 将gwindows-drawing.ads放入gwindows的新旧安装中,它们是相同的。 不幸的是,如果没有很多回溯,我无法在旧PC上构建旧项目驱动 在其他地方使用,尽管我已经备份了它


如果您能告诉我如何查找问题的原因,我将不胜感激。

GWindows有两种与Windows API匹配的字符串模式:ANSI 8位字符和Unicode。 GString类型是字符串或宽字符串。 可以使用ansi.cmd和unicode.cmd切换框架的模式。
显然,您的旧项目处于ANSI模式。

GWindows有两种与Windows API匹配的字符串模式:ANSI 8位字符和Unicode。 GString类型是字符串或宽字符串。 可以使用ansi.cmd和unicode.cmd切换框架的模式。
显然,您的旧项目处于ANSI模式。

您真的确定提供宽字符串不能解决问题吗?编译器输出是否保持完全相同?您还可以尝试使用“Wide_Image而不是”Image,然后忽略“Wide_String”。您还可以尝试通过将Put替换为GWindows.Drawing.Put来完全限定Put过程,以快速检查是否没有其他接受类型打印机\u Canvas\u类型的Put方法可见。据我所见,GWindows.Drawing中没有定义这样的Put过程,因此错误表明除了GWindows.Drawing visible.Integer'Wide_Image x中定义的Put过程之外,还有其他Put过程,谢谢。明天我将检查您的其他建议,并确认当我使用“宽字符串整数”图像x时,编译器输出是否存在差异。剩下的唯一编译器错误都与以下行有关:将MapCanvas、10、3放到\u StringSelectionHeaders1;明天我将再次讨论这个问题——我现在也要处理这些错误。你真的确定提供宽字符串不能解决问题吗?编译器输出是否保持完全相同?您还可以尝试使用“Wide_Image而不是”Image,然后忽略“Wide_String”。您还可以尝试通过将Put替换为GWindows.Drawing.Put来完全限定Put过程,以快速检查是否没有其他接受类型打印机\u Canvas\u类型的Put方法可见。据我所见,GWindows.Drawing中没有定义这样的Put过程,因此错误表明除了GWindows.Drawing visible.Integer'Wide_Image x中定义的Put过程之外,还有其他Put过程,谢谢。明天我将检查您的其他建议,并确认当我使用“宽字符串整数”图像x时,编译器输出是否存在差异。剩下的唯一编译器错误都与以下行有关:将MapCanvas、10、3放到\u StringSelectionHeaders1;明天我将再次讨论这个问题——我现在也有地方去处理这些错误。谢谢,这似乎是问题的一个可能来源。考虑到Ada是我的一个爱好,在非PC平台上学习其他语言有很长的历史,你能告诉我如何切换到正确的框架模式吗?我不熟悉ansi.cmd和unicode.cmd这是一个内置的Windows命令行解释器脚本,您可以在gwindows目录中找到它们。只需双击ansi.cmd或从cmd或Powershell运行ansi即可。谢谢。谢谢,这可能是问题的根源。考虑到Ada是我的一个爱好,在非PC平台上学习其他语言有很长的历史,你能告诉我如何切换到正确的框架模式吗?我不熟悉ansi.cmd和unicode.cmd这是一个内置的Windows命令行解释器脚本,您可以在gwindows目录中找到它们。只需双击ansi.cmd或从cmd或Powershell运行ansi即可。谢谢。