0

私は C++Builder XE6 & XE7 を使用しています。WPTools (Pascal ベース) コンポーネントからいくつかの CPP コンポーネントを派生させましたが、WPTools6 および以前のバージョンの XE では問題なく動作しましたが、それらを WPTools7 で動作させることができませんでした。

派生 CPP コンポーネントをビルドしようとすると、Builder は WPTools .HPP ファイルで見つけた参照コードによる受け渡しを好まないようです。

次のような行:

extern DELPHI_PACKAGE bool __fastcall WPLocateNextPrev(bool Previous, TParagraph* &active_paragraph, int &active_posinpar, bool &EOF);
extern DELPHI_PACKAGE bool __fastcall WPLocateNext(TParagraph* &active_paragraph, int &active_posinpar, bool &EOF);
extern DELPHI_PACKAGE bool __fastcall WPLocatePrev(TParagraph* &active_paragraph, int &active_posinpar, bool &BOF);``

次のようなエラーが発生します。

[bcc32 Error] WPRTEDefs.hpp(6117): extern variable cannot be initialized
[bcc32 Error] WPRTEDefs.hpp(6117): Improper use of typedef 'TParagraph'
[bcc32 Error] WPRTEDefs.hpp(6117): Undefined symbol 'active_paragraph'

上記の .HPP コードの宣言が extern 変数を初期化しようとしていることがわかりませんが、そうである場合は教えてください。

開発者は、過去には通常役に立ちましたが、あまり役に立ちませんでした。彼が問題を知らないのか、それとも私のように CPP コンポーネントを派生させようとした顧客が他にいないだけなのか、私にはわかりません。

CPP WPTools から派生したコンポーネントをあきらめなければならない場合、すべてのコードを修正するにはおそらく 1 か月以上かかるので、解決策があれば見つけたいと思っています。誰かがこれの修正を知っていますか?

変数を参照して NULL 値を明示的にチェックしない限り、単純にポインターを渡すだけで C++ の参照渡しと同じ結果が得られるというのが私の印象です。

WPTools7 コードを変更して、この参照渡しをバイパスすることで問題が解決するかどうかを確認することを考えていますが、他の人が Delphi と Builder 用に私よりもずっと長く開発しているので、お金を使う前にアドバイスを求めたいと思いました。それに多くの時間。

ソースは Object Pascal/Delphi にあるため、逆参照しないということの意味を理解しようとする必要があります。私は、Object Pascal のすべてが本質的にポインターであるという印象を持っていますが、完全にはわかりません。

いずれにせよ、誰かがこのようなことを試したことがあるかどうか尋ねたいと思いましたか? そして/または、それが私の悩みに役立つかどうか、または新しい悩みを生み出すかどうかについて誰かが考えている場合は?

助けてくれてありがとう。

4

0 に答える 0