在将RADScene安装到RAD Studio 2010中时,如何解决致命的编译器错误?

时间:2012-05-09 12:58:14

标签: delphi c++builder glscene

我正在尝试将GLScene安装到RAD Studio 2010 ,目的是在大多数C ++项目中使用它。我下载了latest snapshot (5991, November 2011),并且一直在尝试编译和安装两个主要软件包:GLScene_DesignTimeGLScene_RunTime。我甚至没有尝试过其他一些库(CUDA等),我只是想让基本软件包运行。

我遇到了一些问题,其中一个我无法解决,而且我正在寻找那些成功安装了GLScene ,或者可能知道如何解决这些Delphi编译器错误。

第一个问题(解决?)

编译时,许多文件出现以下错误:

[DCC Warning] GLSelection.pas(297): W1025 Unsupported language feature: 'abstract class method'

这是由方法声明引起的:

TGLBaseSelectTechnique = class
  public
    class function IsSupported: Boolean; virtual; abstract;

Delphi 2010中似乎不支持虚拟抽象类方法,我通过删除“abstract”并提供虚拟实现来解决它,例如:刚刚返回false

第二个问题(未解决) - Delphi编译器致命错误

我现在遇到两个更严重的错误。编译时,编译器会失败:

[DCC Fatal Error] Exception EAccessViolation: Access violation at address 05AE8ED9 in module 'dcc140.dll'. Read of address 00000003
[DCC Error] Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

它没有说明是什么文件造成了这种情况,但我认为是由Spline.pas引起的。偶尔也不经常,我得到这个:

[DCC Fatal Error] Spline.pas(1): F2084 Internal Error: AV062D8ED9-R00000003-0

这表示Spline.pas,我认为第一个错误可能也与文件有关,因为在获得第一个错误后如果我清理项目,清理将失败,说它无法删除{{1} }。 (我必须关闭并重新打开IDE。)Spline.hpp只包含以下内容:

Spline.hpp

然后就停止了。在我看来尝试生成HPP文件时失败了。

我总是得到这两个失败中的一个。第二个是我可以绑定到特定文件的唯一一个;第一次在项目中途失败了,但是当它失败时我无法看到它到底在哪里。我正在IDE中编译。

我查看// CodeGear C++Builder // Copyright (c) 1995, 2009 by Embarcadero Technologies, Inc. // All rights reserved // (DO NOT EDIT: machine generated header) 'Spline.pas' rev: 21.00 #ifndef SplineHPP #define SplineHPP #pragma delphiheader begin #pragma option push #pragma option -w- // All warnings off #pragma option -Vx // Zero-length empty class member functions #pragma pack(push,8) #include <System.hpp> // Pascal unit #include <Sysinit.hpp> // Pascal unit ,看起来非常基本的代码 - 我根本看不到任何异常。您可以find it here,显然文件hasn't been touched for seven years ...所以我认为它应该编译:)

如果我更改项目设置以使其不生成标题,则编译正常。 (只生成obj文件,以及任何其他不包含“标题”的设置,一切正常。)但这对我来说不是一个好的解决方法 - 毕竟,我需要在C ++ Builder中使用它,所以我的正常设置将是“生成所有C ++ Builder文件”。至少,我需要HPP和OBJ文件。

有没有人在最近的C ++ Builder版本中使用过GLScene?你遇到过类似的问题吗?知道如何解决这个问题吗?

我正在使用:

  • RAD Studio 2010(完全修补并更新;安装了DDevExtensions和IDEFixPack。)
  • 2011年11月的快照;我也尝试了2011年3月的快照,并遇到了同样的问题。 Link to snapshots here
  • Delphi 2010软件包通过更改链接器输出来修改 以生成C ++ Builder文件;以及BCB 6包。两者都有同样的错误。

4 个答案:

答案 0 :(得分:5)

编辑:GLScene现在与RAD Studio XE3(包括C ++ Builder)兼容。

  

现在GLScene与Embarcadero RAD Studio完全兼容   C ++ Builder XE3在设计和运行时模式下。

     

您可以从http://yadi.sk/d/o1QGI2KA10MK1(95Mb)

下载

- 来自Pal Wassail's post on the Embarcadero forum thread


  

{quote:title = David M写道:} {quote}   您好,

     

我正在尝试将GLScene安装到RAD Studio中......   大卫

这里是针对Delphi XE3头生成器的EMB开发人员的更简单的测试 -

1.创建VCL表格申请表 2.在Unit1.pas接口部分添加

type
 TVector3f = array[0..2] of single;
 TVector4f = array[0..3] of single;

 function VectorAdd(const v : TVector3f; const f : Single) : TVector3f; overload;
 function VectorAdd(const v : TVector4f; const f : Single) : TVector4f; overload;

3.添加实施部分

function VectorAdd(const v : TVector3f; const f : Single) : TVector3f;
begin
  Result[0]:=v[0]+f;
  Result[1]:=v[1]+f;
  Result[2]:=v[2]+f;
end;

function VectorAdd(const v : TVector4f; const f : Single) : TVector4f;
begin
   Result[0]:=v[0]+f;
   Result[1]:=v[1]+f;
   Result[2]:=v[2]+f;
   Result[3]:=v[3]+f;
end;
  1. 设置Delphi编译器选项“生成C ++ .objs,标题,命名空间,导出”
  2. 构建项目
  3. 然后Delphi XE3编译器使用行生成错误的头文件Unit1.hpp:

    extern PACKAGE TVector3f __fastcall VectorAdd   (float const v,const float f)/ overload * /; extern PACKAGE TVector4f __fastcall VectorAdd   (float const v,const float f)/ overload * /;

  4. 如果您现在尝试在my.cbproj中使用此头文件Unit1.hpp,则会出现致命错误: “E2238多个声明......”

  5. 是的,如果您将矢量数组类型更改为记录:

     TVector3f = record
        case boolean of
          true  : (Coord: array[0..2] of single);
          false : (X,Y,Z: single);
    end;
    
    • 那么问题就可以解决了,因为在这种情况下Delphi编译器会生成

      extern PACKAGE Vectortypes :: TVector3f __fastcall VectorAdd    (const Vectortypes :: TVector3f&amp; v,const float f)/ * overload * /; extern PACKAGE Vectortypes :: TVector4f __fastcall VectorAdd    (const Vectortypes :: TVector4f&amp; v,const float f)/ * overload * /;

    您可以构建C ++ Builder VCL应用程序而不会出现“多个声明”错误。它是在2007年为旧的GLScene版本完成的,但现在你需要从VectorGeometry.pas模块开始重写新库中的部分代码。

    1. 有第二种方法来修复这种自动头文件的错误 - 在生成C / C ++头文件,命名空间和包选项中改进Delphi编译器。但它掌握在EMB开发人员手中。

答案 1 :(得分:3)

我是这样做的:

  • Download and extract this ZIP file(直接进入GLScene的根文件夹,允许它根据需要覆盖)
  • 加载相应的RAD Studio版本(2007至XE2)并打开文件* GLScene_Group.groupproj *(其中 =您的RAD Studio版本)
  • 按组顺序构建/安装每个程序包

我仔细地组装了这些固定包,以确保它们从2007年到XE2都能正常安装和运行。有些软件包(在每个组的底部)需要额外的依赖项才能运行(例如Python软件包),所以要注意这些。

我已经测试并确认这些仅适用于RAD Studio 2007至XE2

不要忘记将 \ Source 文件夹(和所有子文件夹)添加到搜索路径(根据需要为IDE本身或单个项目添加),否则使用GLScene组件的项目将无法编辑抱怨失踪单位。

享受!

答案 2 :(得分:2)

不适用于RAD Studio 2009,但对于BCB6中的旧GLScene安装,她运行良好。但是在RAD Studio XE / XE2 / XE3中安装后的当前版本根本不起作用。似乎主要问题隐藏在Vectorgeometry.pas中的过程的重载机制中,因此Delphi编译器(使用所有C ++文件和包的输出选项)在Vectorgeometry.hpp和其他中创建重合字符串。因此,您在C ++ Builder面板中有可视组件,但您的应用程序在构建期间失败并出现错误。它必须由GLScene开发人员在.pas文件中修复。

当您尝试使用C ++ Builder XE3下的GLScene构建应用程序时,您将在glcrossplatform.hpp,vectorgeometry.hpp等中获得超过50个BCC32错误。有一种方法可以自行决定修复库。制作GLScene目录的新副本。在GLCrossPlatform.pas中将RGB程序重命名为GLRGB(它的工作!)。然后在VectorGeometry.pas和许多其他源代码文件中使用稍微不同的参数名称更改所有重载过程,因此在Delphi选项输出C ++(包括包的最后一个选项)之后,您不应该在.hpp文件中遇到重合过程。然后重建所有GLScene包。在这个过程的最后,我希望它适用于C ++ Builder XE3。

答案 3 :(得分:1)

我确实有同样的错误。

@第二个问题

转到“spline.pas”并更改

TCubicSplineMatrix = array of array[0..3] of Single;

TCubicSplineMatrixEx = array[0..3] of Single;

TCubicSplineMatrix = array of TCubicSplineMatrixEx;

现在“Rad Studio 2009”可以为C ++ Builder编译和安装GLScene。我可以启动一个新的C ++ Builder VCL应用程序并从工具箱中选择GLScene组件并放入我的VCL表单。

我认为,这是您的基本问题的解决方案,但不幸的是我无法成功编译我的VCL项目。我在glcrossplatform.hpp和vectorgeometry.hpp中遇到了50多个BCC32错误。如果有人可以在这里提供帮助,那就太棒了。

@Your First problem

我也得到了这个警告,但我没有改变它。只是忽略它?!