7

我正在尝试将 GLScene 安装到 RAD Studio 2010中,目的是从主要是 C++ 项目中使用它。我下载了最新的快照(5991,2011 年 11 月),并一直在尝试编译和安装两个主要包: GLScene_DesignTimeGLScene_RunTime. 我什至没有尝试过其他一些库(CUDA 等),我只想让基本包运行。

我遇到了许多问题,其中一个我无法解决,我正在寻求任何成功安装 GLScene的 SO 上的人的帮助,或者可能知道如何解决这些 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,并且我认为第一个错误也可能与文件有关,因为在获得第一个错误后,如果我再清理项目,清理将失败,说它无法删除Spline.hpp。(我必须关闭并重新打开 IDE。)Spline.hpp仅包含以下内容:

// 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

它在那里停止。在我看来,尝试生成 HPP 文件时它失败了。

我总是遇到这两个失败之一。 第二个是我可以绑定到特定文件的唯一一个;第一个在项目进行到一半时失败了,但我看不到它失败时的位置。我正在从 IDE 内部编译。

我看过了Spline.pas,它看起来很基本的代码 - 我根本看不到任何不寻常的东西。你可以在这里找到它,显然该文件已经七年没有被触及......所以我认为它应该编译:)

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

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

我在用:

  • RAD Studio 2010(完全修补和最新;安装了 DDevExtensions 和 IDEFixPack。)
  • 2011 年 11 月快照;我也尝试了 2011 年 3 月的快照,但遇到了同样的问题。 链接到这里的快照
  • Delphi 2010 软件包通过更改链接器输出以生成 C++ Builder 文件进行修改;还有 BCB 6 包。两者都给出相同的错误。
4

4 回答 4

5

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

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

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

- 来自Pal Wassail 在 Embarcadero 论坛主题上的帖子


{quote:title=David M 写道:}{quote} 嗨,

我正在尝试将 GLScene 安装到 RAD Studio... David

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

1.创建一个VCL Form Application 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 Compiler 选项“Generate C++ .objs, headers, namespaces, export”</li>
  2. 构建项目
  3. 然后 Delphi XE3 编译器生成错误的头文件 Unit1.hpp,其中包含以下行:

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

  4. 如果现在您尝试在 my.cbproj 中使用此头文件 Unit1.hpp,则会收到致命错误:“E2238 Multiple declarations in ...”</p>

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

 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 &v, const float f)/* 重载 */; extern PACKAGE Vectortypes::TVector4f __fastcall VectorAdd (const Vectortypes::TVector4f &v, const float f)/* 重载 */;

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

  1. 还有第二种方法可以修复这种自动头文件的错误——在生成 C/C++ 头文件、命名空间和包选项中改进 Delphi 编译器。但它掌握在 EMB 开发人员手中。
于 2012-11-21T09:21:09.977 回答
3

这是我的做法:

  • 下载并解压此 ZIP 文件(直接进入 GLScene 的根文件夹,允许根据需要覆盖)
  • 加载适当的 RAD Studio 版本(2007 到 XE2)并打开文件 *GLScene_Group.groupproj*(其中= 你的 RAD Studio 版本)
  • 按组顺序构建/安装每个包

我已经仔细组装了这些固定包,以确保它们从 2007 年到 XE2 都能正常安装和运行。一些包(在每组的底部)需要额外的依赖才能运行(例如 Python 包),因此请注意这些。

我已经测试并确认这些只能在 RAD Studio 2007 到 XE2 上工作

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

享受!

于 2012-06-13T13:05:15.850 回答
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。

于 2012-11-13T13:13:44.037 回答
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 错误。如果有人可以在这里提供帮助,那就太好了。

@你的第一个问题

我也收到了这个警告,但我没有任何改变。直接无视?!

于 2012-10-01T15:22:00.893 回答