4

私が作成した別のアプリケーションからコードをコンパイルできるようにしたいと考えています。

長い話:

私は SDL を使用してゼロから 2D エンジンを作成することに取り組んでいます (使用する方が良いものについてはコメントしないでください)。SDL ライブラリの使用方法を理解しており、簡単なゲームを作成できます。ただし、より大きなプロジェクトに取り組みたいのですが、コードとシステム全体を整理するのに役立つアプリケーションを作成する必要があります。基本的に、このプログラムはエディターになります (Unity や UDK によく似ていますが、もちろんそれほど高度ではありません)。コード エディターなどを使用して実際のアプリケーションをプログラミングするのは難しくありませんが、私の質問は、そのコードを取得して、コンパイル、実行、または exe としてエクスポートする方法についてです。(コードとスクリプトを取得し、それらをコンパイル用のアーキテクチャに入れることは問題ではなく、アイデアをコンパイルする方法を知っていることです)。

これは私にとって新しいアイデアであり、Google で調べても思ったような結果が得られなかったので、StackOverflow にアクセスすることにしました。これまでに質問せずにここで多くの質問に答えてもらったからです (ところで、皆さんは素晴らしいです)。

TL;DR バージョン:

別の自作アプリケーションからコードをコンパイルします。

(私の考えは、インターフェイスまたは GUI に C# を使用し、次に実際のエンジンに C/C++ を使用することです)

4

4 に答える 4

1

私の答えは、私が何をするかに基づいています (少なくとも開発期間中): 既存のコンポーネントを使用します。つまり、エディターとスクリプト コンパイラーです。

エディターにはAvalon Editを使用できます

コンパイル/スクリプトが必要な場合は、CS-Scriptを使用します

これらを使用して 4 ~ 5 時間で起動して実行することができ、少しの作業でほとんどのエンティティ スクリプトをホットスワップできます。

プロジェクトのルート スクリプト ファイルを読み取って実行を開始できる基本的な exe を用意するだけです。

まったく、CS-Script がメモリ内で作成するアセンブリを取得して、後で使用できるように保存することもできます。

その後、「エンジンを一から作り直す」段階を過ぎたら、戻ってきて他の言語をサポートすることができます。

于 2013-04-12T09:38:48.530 に答える
0

以下をご覧ください。

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"using System.Linq;
    class Program {
      public static void Main(string[] args) {
        var q = from i in Enumerable.Rnge(1,100)
                  where i % 2 == 0
                  select i;
      }
    }");

results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));

resultsこのコードは、変数内のコードをコンパイルして に出力しfoo.exeます。

于 2013-04-12T10:50:05.090 に答える