7

ほとんどC++プロジェクトから使用することを目的として、GLSceneをRADStudio2010にインストールしようとしています。最新のスナップショット(5991、2011年11月)をダウンロードし、2つのメインパッケージをコンパイルしてインストールしようとしています: GLScene_DesignTimeGLScene_RunTime。他のライブラリ(CUDAなど)のいくつかも試していません。基本パッケージを実行したいだけです。

私はいくつかの問題に遭遇しましたが、そのうちの1つは解決できません。また、GLSceneのインストールに成功した、またはこれらのDelphiコンパイラエラーの解決方法を知っている可能性のあるSOの誰かの助けを求めています。

最初の問題(解決しましたか?)

コンパイル時に、いくつかのファイルで次のエラーが発生しました。

[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です。

2番目の問題(解決されていません)-D​​elphiコンパイラの致命的なエラー

現在、さらに2つの重大なエラーが発生しています。コンパイルすると、コンパイラは次のように失敗します。

[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ファイルを生成しようとしたときに失敗したように見えます。

私はいつもこれらの2つの失敗のうちの1つを受け取ります。 2つ目は、特定のファイルに関連付けることができる唯一のものです。最初のものはプロジェクトの途中で失敗しますが、失敗したときにどこに到達したのかわかりません。IDE内からコンパイルしています。

調べてみましたがSpline.pas、かなり基本的なコードのようです。異常なものはまったく見当たりません。あなたはここでそれを見つけることができます、そして明らかにファイルは7年間触れられていません...それで私はそれがコンパイルされるべきだと思います:)

ヘッダーを生成しないようにプロジェクト設定を変更すると、正常にコンパイルされます。(objファイルだけを生成し、「ヘッダー」を含まないその他の設定はすべて正常に機能します。)しかし、これは私にとっては良い回避策ではありません。結局のところ、C ++ Builderから使用する必要があるので、通常の設定は「すべてのC++Builderファイルを生成する」です。最低限、HPPファイルとOBJファイルが必要です。

ここで誰かがC++Builderの最近のバージョンでGLSceneを使用しましたか?同様の問題に遭遇しましたか?これを解決する方法はありますか?

使ってます:

  • RAD Studio 2010(完全にパッチが適用され、最新であり、DDevExtensionsとIDEFixPackがインストールされています。)
  • 2011年11月のスナップショット。2011年3月のスナップショットも試しましたが、同じ問題が発生しました。 ここにスナップショットへのリンク
  • Delphi 2010パッケージは、リンカー出力を変更してC++Builderファイルを生成することによってのみ変更されます。また、BCB6パッケージ。どちらも同じエラーを出します。
4

4 に答える 4

5

編集: GLSceneは、RAD Studio XE3(C ++ Builderを含む)と互換性があります。

デザインモードおよびランタイムモードと同様に、GLSceneとEmbarcadero RAD Studio C ++BuilderXE3との完全な互換性があります。

http://yadi.sk/d/o1QGI2KA10MK1(95Mb)からダウンロードできます。

--EmbarcaderoフォーラムスレッドのPalWassailの投稿から。


{quote:title = David Mが書いた:} {quote}こんにちは、

GLSceneをRADStudioにインストールしようとしています...David

そして、ここにDelphiXE3ヘッダージェネレータの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++.obj、ヘッダー、名前空間の生成、エクスポート」を設定します</ 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複数の宣言が…」</ 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 ++BuilderVCLアプリケーションを構築できます。これは2007年に古いGLSceneバージョンで行われましたが、VectorGeometry.pasモジュールから始めて、新しいライブラリのコードの一部を書き直す必要があります。

  1. このような自動ヘッダーのエラーを修正する2番目の方法があります-C/C ++ヘッダー、名前空間、およびパッケージオプションの生成におけるDelphiコンパイラの改善。しかし、それはEMB開発者の手に委ねられています。
于 2012-11-21T09:21:09.977 に答える
3

これが私がそれをする方法です:

  • このZIPファイルをダウンロードして解凍します(GLSceneのルートフォルダーに直接、必要に応じて上書きできるようにします)
  • 適切なRADStudioバージョン(2007からXE2)をロードし、ファイル* GLScene_Group.groupproj *(ここで= RAD Studioバージョン)
  • 各パッケージをグループ順にビルド/インストールします

これらの固定パッケージを注意深く組み立てて、2007年からXE2まですべてが正しくインストールおよび機能するようにしました。一部のパッケージ(各グループの下部)では、機能するために追加の依存関係が必要になるため(Pythonパッケージなど)、これらに注意してください。

これらがRADStudio2007から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 ++BuilderXE3で機能することを願っています。

于 2012-11-13T13:13:44.037 に答える
1

私は彼とまったく同じエラーを抱えています。

@2番目の問題

「spline.pas」に移動して変更します

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

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

TCubicSplineMatrix = array of TCubicSplineMatrixEx;

これで、「RadStudio2009」はC++Builder用のGLSceneをコンパイルおよびインストールできます。新しいC++Builder VCLアプリケーションを起動し、ツールボックスからGLSceneコンポーネントを選択して、VCLフォームにドロップできます。

これが基本的な問題の解決策だと思いますが、残念ながらVCLプロジェクトを正常にコンパイルできません。glcrossplatform.hppとvectorgeometry.hppで50を超えるBCC32エラーが発生します。誰かがここで助けることができれば、それは素晴らしいことです。

@あなたの最初の問題

私もこの警告を受け取りますが、何も変わっていません。無視してください!

于 2012-10-01T15:22:00.893 に答える