5

たとえば、メソッドの本体をデータベースに保存し、後で実行するにはどうすればよいですか? (私は Delphi XE2 を使用しています。RTTI が役立つかもしれません。)

4

2 に答える 2

6

RTTI は完全な言語インタープリターではありません。Delphi はコンパイル済み言語です。作成してコンパイルし、バイナリのみを配布します。Embarcadero でない限り、DCC32 (コマンド ライン コンパイラ) を配布する権利はありません。

ただし、JVCLには、「JvInterpreter」と呼ばれる非常に使いやすいコンポーネントにラップされた Delphi に似た言語サブセットが含まれています。(パスカルとして) いくつかのコードを記述し、それをデータベースに配置することができます。次に、データベースから取得した「そのコードを実行」(コンパイルではなく解釈) できます。通常、これらはコード内のメソッドを呼び出すプロシージャである必要があります。インタープリターに公開したいコンパイル済み API を公開する「ラッパー」をいくつか作成する必要があります (ライブ データ、データベース接続オブジェクト、またはテーブル/クエリ オブジェクトへのアクセスを提供します)。これは完璧に聞こえると思いますよね?まあ、それはトラップです。

「構成複雑度クロック」と呼ばれるものに注意してください。あなたはちょうど 9 時に達したところです。そこから多くの痛みと苦しみが始まります。問題があり、それを正規表現で解決し、「2 つの問題が発生した」場合と同様に、アプリにスクリプトと DSL を追加すると、1 つの問題を解決し、他のいくつかの問題を作成する方法があります。

「データベースの blob フィールドに DLL を格納する」という考えは邪悪でばかげていると思いますが、スクリプトやドメイン固有の言語をアプリケーションに無作為に追加することも、多くの苦痛を要求していると思います。他の簡単な解決策が機能するかどうかを最初に自問してください。次に、YAGNI 原則 (You Ain't Gonna Need It) と KISS (keep-it-simple-smartguy) を適用します。

質問で行うことについて尋ねているようなことを実装する前に、よく考えてください。

于 2012-06-04T12:32:48.490 に答える
2

あなたの最良のオプション、IMHOは、スクリプトエンジンを使用し、スクリプトをデータベースに保存することです.

または、コードを dll に入れ、その dll をデータベースに入れることもできます。リソースから dll を RAM にロードして処理するためのコードがあり、dzlibなどで LoadLibrary を使用してロードされたかのように使用できます。dll で動作するかどうか、Windows のどのバージョンで動作するかはよくわかりませんが、私が試したものでは動作します。

于 2012-06-04T11:39:16.900 に答える