Dav*_*vid 7 delphi c++builder glscene
我正在尝试将GLScene安装到RAD Studio 2010中,目的是从大多数C++项目中使用它.我下载了最新的快照(5991,2011年11月)并且一直在尝试编译和安装两个主要的软件包:   GLScene_DesignTime和GLScene_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.
我现在遇到两个更严重的错误.编译时,编译器失败如下:
[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?你遇到过类似的问题吗?知道如何解决这个问题吗?
我在用:
小智 5
编辑: GLScene现在与RAD Studio XE3(包括C++ Builder)兼容.
现在,在设计和运行时模式下,GLScene与Embarcadero RAD Studio C++ Builder XE3完全兼容.
- 来自Pal Wassail关于Embarcadero论坛帖子的帖子.
{quote:title = David M写道:} {quote}嗨,
我正在尝试将GLScene安装到RAD Studio ...... David
这里是针对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;
然后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*/;
如果您现在尝试在my.cbproj中使用此头文件Unit1.hpp,则会出现致命错误:"E2238 ...中的多个声明"
是的,如果您将矢量数组类型更改为记录:
 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)/*overload*/; extern PACKAGE Vectortypes :: TVector4f __fastcall VectorAdd(const Vectortypes :: TVector4f&v,const float f)/*overload*/;
并且您可以在没有"多个声明"错误的情况下构建C++ Builder VCL应用程序.它是在2007年为旧的GLScene版本完成的,但现在你需要从VectorGeometry.pas模块开始重写新库中的部分代码.