問題タブ [mono-embedding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
6037 参照

c++ - 埋め込み: mono vs lua

C/C++ アプリケーションに mono (.NET のオープン ソース実装) を組み込んだ人々の経験に興味があります。そのようなアプリケーションをどのように配布し、依存関係は何ですか? 私は OS X でテストしましたが、mono は巨大なフレームワーク (数百 MB) として提供されます。私のアプリのすべてのユーザーがこの大きなフレームワークを必要としていますか、それともそれを取り除くか、すべてをメインの実行可能ファイルにコンパイルすることができますか?

私は以前、Lua を C++ アプリに埋め込んだ経験があり、メインの実行可能ファイルに lua インタープリター全体を静的にリンクできるため、これは非常にうまく機能します。したがって、外部依存関係はありません。モノで似たようなことをすることは可能ですか?

Lua と比較して mono を見つけた方法についてコメントできる Lua 関係者はいますか?

PS: 埋め込みとは、mono 環境を初期化し、.NET アセンブリをロードして実行し、アセンブリ内の C# コードとメイン実行可能ファイル内の C++ メソッドの間の通信を可能にする C++ アプリケーションを意味します。

0 投票する
2 に答える
4519 参照

debugging - 組み込みのモノラル ランタイムによって起動された C# アセンブリをデバッグしていますか?

ゲーム プログラミングに C# を使用する小さなゲーム エンジンについて話しています。そのため、mono ランタイムを組み込んだ C++ アプリがあります (「ランチャー」と呼びます)。そして、私のゲーム エンジン クラス ライブラリである C# で記述されたアセンブリがあります。Embedding Monoで提案されているように、ランチャーはアセンブリを起動します。

そして今、興味深い部分です!ランチャーは、ゲーム エンジン クラスの内部メソッドとして mono ランタイムに公開される C++ のさまざまな関数を実装します。そのため、私のゲーム エンジン アセンブリは、エンジンの大部分を C++ で実装するランチャーなしでは何もありません。

質問: C# アセンブリをデバッグするにはどうすればよいですか? さらに重要なことは、C# で記述しようとしているゲームをどのようにデバッグすればよいのでしょうか? ???

ご存じのように、MonoDevelop Debugger を使用してアセンブリをデバッグすることはできません。これは、一部のメソッドの内部 C++ 実装を受信できないためです。

ランチャーを実行する必要があります。その後、ランチャーは、組み込みの mono ランタイムを使用して C# アセンブリを起動します。そして、デバッグを可能にするために、起動されたアセンブリに接続する何かが必要です。

または他の方法。ありがとうございました!

0 投票する
1 に答える
1145 参照

c# - 埋め込み Mono: C++ での C# 構造体の作成/マーシャリング

私は、Mono を埋め込むアプリケーションに取り組んでおり、関数の 1 つに対するパラメーターの 1 つである単純な C# 構造体を持っています。

その構造体を作成して C++ から C# に渡すにはどうすればよいですか?

次のような C# 構造体がある場合:

厳密な C++ バージョンを作成して、そのように mono に渡すことはできますか?

0 投票する
1 に答える
4067 参照

c# - Embedded Mono: 別のスレッドで「mono_runtime_invoke」を使用する方法

こんにちは、私は NaCl で Embedded Mono を使用しています。これまでのところすべてが機能していますが、.NET exe が実行されたスレッドと同じスレッドではない c から .NET メソッドを呼び出す方法がわかりません。

これが私が使用しようとしている方法です:

0 投票する
1 に答える
526 参照

c# - C# の「出力パラメーター」を使用してモノを埋め込む

libmono を使用して C アプリケーションに C# クラスを埋め込もうとしていますが、ドキュメントが少し不足しています。

プロトタイプでメソッドを呼び出そうとしていますvoid MessageToSend(out MessageObject message);

「出力パラメータ」を表すにはどうすればよいですか? MonoObject へのポインタからポインタへのポインタですか? ありがとう。

PS。libmono に関する限り、「out」パラメータと「ref」パラメータは同じですか?

0 投票する
1 に答える
948 参照

c# - モノを埋め込むときにオブジェクトから配列フィールドを取得する方法

私が書いているアプリケーションにモノを埋め込んでいます。私が作成したオブジェクトの 1 つは次のようになります。

を使えばメッセージ配列を表すmono_field_get_value_objectを取得できますMonoObject *が、どうすれば配列のようにアクセスできますか? への明示的なキャストはありMonoArray *ますか?

ありがとう。

0 投票する
1 に答える
377 参照

macos - 埋め込み Mono: mono_jit_cleanup() 呼び出し時の EXC_BAD_ACCESS (SIGSEGV)

Mono ランタイムを既存の Cocoa アプリケーションに埋め込んでいます。GitHub (マスター ブランチ) から最新のランタイムをビルドし、マネージ コードを実行した後にアプリケーションを終了すると、mono_jit_cleanup() 中に次のようになります。

https://dl.dropbox.com/u/108566029/BAD_ACCESS.png

HttpWebRequest 経由で HTTP リクエストを送信しようとしたときにのみ再現されます。具体的には、GetRequestStream() を呼び出すとします。コードは正常に機能し、すべての管理対象オブジェクトが正しく破棄されます。mono_jit_cleanup() は一度だけ呼び出されます。この問題は、ランタイムのシャットダウン中にのみ発生します。

これは、最新の Mono 2.10.x ブランチでも再現されています。しかし、私はSIGSEGVを取得します。

これはさまざまな場所で発生する可能性があるため、スレッドの問題のようです。

では、ランタイムを正しくシャットダウンするにはどうすればよいですか。mono_jit_cleanup() 呼び出しは、ランタイムを正しく破棄するのに十分ですか? また、ランタイムを破棄せずに (mono_jit_cleanup() 呼び出しなしで) アプリケーションを終了できますか?



PS
私は、OSX 10.8.3でMono v2.0(実際には3.5)ランタイムの32ビットビルドを使用しています。libmono-2.0.1.dylib に対してリンクしているので、Boehm GC のはずです。同じ問題が SGen GC でも再現されます。

PPS
別のエラーが発生します https://dl.dropbox.com/u/108566029/SIGABRT.png

0 投票する
1 に答える
951 参照

mono - Mono を組み込みの C++ アプリにバンドルする

動的リンクを使用して mono ( http://www.mono-project.com/Embedding_Monoで説明) を埋め込み、スクリプトに C# を使用するサンプル C++ アプリを作成しました。mono がグローバル アセンブリ キャッシュ (GAC) にインストールされている限り、問題なく動作します。

mono を c++ 実行可能ファイルにバンドルして、c++ 実行可能ファイルと一緒にインストールできるようにする方法はありますか?

私は mkbundle を見てきましたが、C# アプリで mono をパッケージ化しているようです。

編集:以下の回答は再フォーマットされています

編集: 修正: 実行可能ファイルのフォルダーに mono-2.0.dll をコピーして貼り付け mono_set_dirs("C:\\cygwin\\usr\\local\\lib","C:\\cygwin\\usr\\local\\etc");、特定のフレームワークの使用を強制するために使用するだけです。

0 投票する
1 に答える
2765 参照

mono - Mono 埋め込みを使用してジェネリック型を取得する

モノ埋め込み呼び出しを使用してジェネリック List<String> オブジェクトを作成するにはどうすればよいですか? List の MonoClass を取得できます。

そして私はそこにあることをドキュメントで見ます

しかし、MonoGenericParam を取得する場所と方法がわかりません。それとも、mono_class_from_name の有効な名前を作成する必要がありますか? これは少し遅くなる可能性があると思いますが、今のところ受け入れます。私は試した

しかし運がない。

アップデート:

OK、方法を見つけました。それでも、このハックは私にはあまりにも汚いように見えるので、公式の方法があるかどうかを確認したいと思います.

基本的に、ジェネリック メソッドの mono ソースを検索し、mono_class_bind_generic_parameters を見つけました ( https://raw.github.com/mono/mono/master/mono/metadata/reflection.cを参照)。それを使用するには、.so に加えて libmono-2.0.a にリンクする必要がありました。しかし、それはうまくいきました:

.a にリンクしたくない場合は、これらのメソッドのソース (UPDATE: ほとんどそうではありません) を取得して再実装 (メタデータなどを解析) できると思いますが、もっと簡単な方法があるのではないかと思います。モノのドキュメントは、以前のように何も答えません。

更新: このスレッドを見つけました: http://mono.1490590.n4.nabble.com/Embedded-API-Method-signature-not-found-with-generic-parameter-td4660157.html埋め込み API が存在しないと思われる私が望むもののために(つまり、mono_class_bind_generic_parametersを公開する必要はありません)。誰かがそれが正しいことを証明できますか? ところで、そのメソッドでは、MonoReflectionType* を取得し、そこから MonoType* を取得する方法はありません - 構造体から ->type を取得するのと同じくらい簡単ですが、これは内部であり、関数を介してアクセスするのは内部です。Mono Embedded は、代わりに「Mono Internal」と呼ぶ必要があります。

更新: 別の方法は、内部構造のコピーを使用して mono_class_inflate_generic_type をハックすることです。

これは .a への静的リンクを必要としませんが、さらに悪いハックです。そして、 mono_class_inflate_generic_type は非推奨としてマークされています-これが非推奨である場合、どちらが最新のものですか?

0 投票する
1 に答える
1545 参照

c# - モノ埋め込み、名前空間を知らずに MonoClass* を取得

Bar.Work以下の C# サンプル コードを考えると、Cから静的メソッドを呼び出すのは非常に簡単です。 を取得し、クラスから を取得して呼び出すだけですMonoClass*MonoMethod*

を取得するMonoClass*には、Bar の名前空間を提供する必要があります。この場合は'sampleApp'、関数にパラメーターとして指定します。

MonoClass *klass = mono_class_from_name(image, "sampleApp", "Bar");

問題は、のクラス名前空間MonoClass*がわからない場合、C でを取得するにはどうすればよいかということです。BarC からアセンブリ内の型のリストを取得する手段はありますか? mono の埋め込みサンプルに例が見つかりませんでした。

C# サンプル

Bar.WorkC からの呼び出し