問題タブ [clr-hosting]

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 投票する
1 に答える
400 参照

c# - GetLastError が 0 でも CLRHosting API が機能しないのはなぜですか?

このチュートリアルに従って、マネージド C# dll をマネージド C# プロセスにロードしようとしています。私は C/C++ でかなりのコーディングを行い、MS COM の実用的な知識を持っていますが、C# とマネージ コードは私にとってまったく新しい獣です。私のシステムには .NET 4.5 があり、これはデフォルトで使用されているのと同じランタイムです (と思います)。これまでのコード (主に上記のリンクからコピー):

コード - C#

ネイティブ コード

問題

問題は、ネイティブ コードを実行すると がGetLastError()返されること0です。それは への呼び出しの直後ExecuteInDefaultAppDomain()です。Codeproject リンクによると、ダイアログ ボックスが表示されているはずですが、私の場合は何も表示されていません。

私は問題について確信が持てません。どんな提案/ポインタも役に立ちます。ありがとう。

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

c# - .NET >= 4.0 の StackOverflowException - 他のスレッドが正常に終了する機会を与える

少なくとも管理対象アプリの終了を延期し (数十ミリ秒)、共有フラグを設定して他のスレッドに正常に終了する機会を与える方法はありますか (SO スレッド自体は明らかにそれ以上何も実行しません)。これに JIT デバッガーまたは CLR ホスティングを使用することを考えています。

なぜ私は何か間違ったことをしたいのですか?:

あまり詳しく説明しなくても、この類推を想像してみてください。あなたはカジノでルーレットに賭けていて、突然ルーレットが信頼できない偽物であることがわかりました。したがって、すぐにカジノを離れたいと思うかもしれませんが、最初にテーブルからベットを回収したいと思うでしょう。残念ながら、非常に厳しいパフォーマンス要件があるため、これに別のプロセスを利用することはできません。

試してみましたがうまくいきませんでした:

StackOverflowException (および MSDN の矛盾する情報) に対する .NET の動作については、SO で何度か議論されています。

HandleProcessCorruptedStateExceptionsAttribute (たとえば、appdomain の未処理の例外ハンドラー) が機能しない

ExecuteCodeWithGuaranteedCleanupが機能しない

legacyUnhandledExceptionPolicyが機能しない

StackOverflowExceptions を処理する他の試みはほとんどないかもしれませんが、Hans Passant によるこの素晴らしい回答で言及されているように、CLR がプロセス全体を終了させることは明らかです。

試してみることを検討してください:

  • JIT デバッガー - 例外を凍結した状態でスレッドを残し、いくつかの共有フラグを設定し (ピン留めされた場所にある可能性が高い)、短時間他のスレッドを解凍します。
  • CLR のホスティングと未処理の例外ポリシーの設定

他に何か考えはありますか?または、これら 2 つの方法での経験 (成功/失敗) はありますか?

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

c++ - mscorlib::_AppDomain、mscorlib::_Type などの宣言はどこにありますか

これをベースhttps://code.msdn.microsoft.com/CppHostCLR-e6581ee0/sourcecode?fileId=21953&pathId=1366553273に使用しています

しかし、私のVS2010では、インテリセンスを取得したり、宣言したりすることはできません。Google を試しましたが、.NET ドキュメントに移動します。

たとえば、引数を取得できません (または宣言されている場所を見つけます): spDefaultAppDomain-> Load_2 (bstrAssemblyName, &spAssembly);

_AppDomainPtr spDefaultAppDomain = NULL; _AppDomainPtr は基本的に mscorlib::_AppDomain..

申し訳ありませんが、私はこのタイプのコーディングの経験があまりないため、質問を適切に定式化する方法がわかりません.

0 投票する
0 に答える
653 参照

c++ - C++ アプリでの .NET CLR のホスティング: サンドボックス化されたアプリ ドメイン (CAS)

TL;DR; C++ アプリからサンドボックス化された AppDomain (CAS の構成) を作成するにはどうすればよいですか?

長いバージョン:

C++ アプリで .NET CLR をホストしていますが、すべて正常に動作しています...ただし、AppDomain には完全な信頼があり、できることをより細かく制御したいと考えています (つまり、PermissionSet の構成など)。 .) 損傷を引き起こす可能性のある未知のアセンブリをロードするためです。

これはその要点です:

最終的に、AppDomain を作成するために必要なものはすべて揃っています (実際に例外を処理しているふりをして、これらの呼び出しのそれぞれから HRESULT をテストするなど...):

アイデアやコード サンプルを歓迎します。