0

Delphiで64ビットアプリケーションを開発していて、プロジェクトを2つのフォルダに分割しました。1つはGUIに使用するコンポーネント用で、もう1つは非ビジュアルオブジェクトとメインプログラムプロジェクト用です。他のプロジェクトでいくつかのコンポーネントを利用したいので、フォルダは分離されています。コンポーネントフォルダは明らかにライブラリパスにあります。

次に、Mainフォルダーにあるユニット(現在はBaseUnitと呼ばれます)からいくつかのプロパティを読み取るビジュアルコンポーネントを開発する必要があります。ただし、BaseUnitは64ビットasmのコードを使用しているため、コンポーネントで使用することはできません。この問題を克服するための最良のオブジェクト指向アプローチは何ですか?

コンポーネントが必要なBaseUnitからプロパティを読み取れるようにするために、読み取る必要のあるオブジェクトのいくつかの簡略化されたバージョンを使用しています。私は過去にすでにこれを行っており、それは機能しますが、もっと実用的な方法があるかどうかはわかりません。コンポーネントとメインプログラムの両方と互換性のある基本クラスを作成することもできますが、BaseUnitの設計をリファクタリングする努力が利益につながるかどうかはまだわかりません。

私の問題をわかりやすく説明したことを願っています^_^よろしくお願いします、パオロ

編集: 答えてくれてありがとう、コンパイラIFDEFアプローチは本質的に最も簡単な方法ですが...私はメインに依存せずに設計時にコンポーネントを存在させる方法を探していると思います事業。それらをそれ自体の非視覚的な部分にリンクすることは、メインプロジェクトの仕事です。これは、voidプロジェクトからGUIを構築し、コンポーネントのプロパティを作業中の「エンジン」(オーディオアプリを開発中)のオブジェクトに接続したいためです。

これらの提案はすべて、メインフォルダがコンポーネントのプロジェクトのパスにある必要があります。ここで、ダミーユニットをComponentsフォルダーに配置しようとしています。これは、読み取る必要のあるプロパティのみを含むBaseUnitのコピーです。このようにして、実行時にコンポーネントを実際のBaseUnitにリンクできます。

4

1 に答える 1

2

インクルードファイルをうまく利用してください:

procedure BaseUnitProcThatUsesASM; assembler;
asm
  {$I asmcode.inc}
end;

プラットフォーム (i386 や x86_64 など) に固有のフォルダーに asmcode.inc を配置し、インクルード パスにコンパイラ マクロを使用できます。私は実際には Delphi を使用していませんが、Delphi には Free Pascal のようなものがあると思います。そうでない場合は、プラットフォームごとに 2 つのプロジェクト ファイルを作成し、それぞれに特定のフォルダーへのパスを含めることができます。

リファクタリングしてはいけないものはリファクタリングしないでください ;)

于 2012-06-30T16:23:07.673 に答える