問題タブ [intermediate-language]
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.
.net - イベントをサブスクライブするときに値を渡し、イベントがトリガーされたときに値を取得する方法 (DynamicMethod の使用上の問題)
タスクは、実行時にイベント ハンドラーを作成することです。イベントごとに異なるパラメーター値で呼び出される 1 つのメソッドが必要です。イベントとその数は、実行時にのみ認識されます。そのため、それぞれが何らかのイベントに割り当てられる動的メソッドを生成しようとしていますが、一般に、それらはすべてインスタンス メソッドに何らかの値を渡して呼び出すだけです。
同様のことがより簡単な方法で実行できれば素晴らしいことです。サブスクライブ段階で何らかの値を渡し、イベントがトリガーされたときにそれを取得することを意味します。
これは私が今やろうとしていることです:
c# - 特定のビルド環境でWPFクリックイベントが2回トリガーされる
私たちは奇妙な問題に直面しています。WPF で記述されたユーザー コントロールがあり、xaml ファイルにクリック イベント ハンドラーを追加しました。ローカル システムでは、期待どおりに動作します。しかし、ビルドがサーバー (コード リポジトリがある場所) で生成されると、結果のビルドにバグがあることに気付きます。バグは、このコントロールに対してクリック イベントが毎回 2 回生成されることです。画像を参照するためのイベント ハンドラー関数で OpenFileDialog を使用しています。VS を介したローカル システム ビルドではビルドに CSC.exe が使用され、サーバーでは MSBuild.exe が使用されることに気付きました。そこで、ローカル システムでも MSBuild を使用してビルドを試みました。ただし、バグはローカル システムでは再現されません。VS を使用してサーバー システムでコードをビルドしても、バグは再現されません。したがって、バグを再現する唯一の方法は、サーバー上で自動ビルドを生成することです。両方の dll (バグのあるものとないもの) の IL コードを比較してみました。イベント ハンドラ関数の IL コードを確認しました。ILコードは同一です。
どのような状況下でもバグがローカル システムで再現されないため、コードに疑いはありません。さらに入力/詳細が必要な場合はお知らせください。
どんな助けでも大歓迎です。
ありがとう、ミシャル
compiler-construction - 中間コードが仮想マシンで実行されると言うのは誤解を招きますか?
私が読んだことの理解が正しければ、仮想マシンは本質的に中間コードのコンパイラです。しかし、(アンマネージ コードの例として)Delphi がそのコンパイラで実行されるとは決して言われません。仮想マシンを単にコンパイラとして説明したほうが混乱しにくいでしょうか?
.net - .NETでは、プライベートメソッドへのアクセスはどのように制限されていますか?
.NETでは、プライベートメソッドとプロパティはランタイムによって強制されますか、それともコンパイラによって強制されますか?
別のオブジェクトのプライベートメソッドを呼び出そうとすると、コンパイラはアクセス例外をスローします。ILを手動で操作したり、リフレクションを介して呼び出したりするとどうなりますか?また、ランタイムバージョンによって異なりますか(1.1対2.0対3.5対4.0)?
.net - アセンブリから特定の IL (.NET Intermediate Language) 署名を抽出するメカニズム
クラスとそのメンバーの IL 署名を抽出する必要がある Microsoft .NET アセンブリ mscorlib.dll で見つかった約 25 の型のリストがあります。タイプごとに 1 つのファイルが必要で、各署名が 1 行に表示されます。たとえば、次のタイプを使用します。
その型のアセンブリから次のものを抽出したいと思います (必要のないプライベート メンバーがいくつかありますが、必要に応じて手動で処理できます)。
そこで、これを達成するための 4 つの方法を考えました。
各タイプの各署名を手動で切り取り、ildasm のテキスト ファイルに (直接または mscorlib.dll のダンプを介して) 貼り付けます。一部のタイプはかなり長いため、これは面倒な作業になる可能性があります。さらに多くのことを行う必要がある場合、これは間違いなく長期的な解決策ではありません。
Reflection を使用してすべての署名を取得しようとするツールを作成します。大まかに言えば、以下の疑似コード [1] のようなものを使用することを考えました。
ildasm の IL ダンプで文字列解析を使用して型を見つけて署名を取得するツールを作成する
タスクを実行するには、既存のツールを使用します。
私のタスクを達成するのに役立つ既存のツールまたはメカニズムを知っている人はいますか? そうでない場合、そのようなツールを作成するためにどの方向に進むべきかについての提案はありますか? また、それを実現する方法についてコードのアイデアがあれば、聞いていただければ幸いです。
[1]
c# - IL では if はどのように見えますか?
IL にコンパイルされると、if
ステートメントはどのように見えますか?
これは、C# の非常に単純な構造です。誰かがそれが実際に何であるかのより抽象的な定義を私に与えることができますか?
c# - 2 つのメソッドの IL をプログラムで比較する
コンパイル済みのアセンブリがあります。そのアセンブリ内のメソッドの 1 つのメソッド実装を、私が期待するものとプログラムで比較したいと考えています。
彼らの IL を比較する方法はありますか? 任意の命令セットのバイト配列表現を取得できたとしても、問題はありません。
助けていただければ幸いです。
c# - C# DLL から .il、C++ DLL へ: 文字列の問題
アンマネージド C++ アプリで使用できるように、C# からいくつかの機能をエクスポートしようとしています。テスト プロジェクトでは、まず、文字列をファイルに書き込む単純な関数を含む C# DLL を作成します。次に、ildasm を使用して、これを中間言語 (.il ファイル) に変換します。.il の関数は次のようになります。
そこにキーワード「ansi」が表示されます... ilasm.exe を使用してこれを C++ DLL に変換した後、C++ アプリでこの関数を使用するためにロードを試みます。
ただし、これは最初の文字 ("h") のみをファイルに書き込みます。C++ で wchar_t の代わりに char を使用する関数を宣言し、L"hello all" の代わりに "hello all" を使用すると、文字列全体がファイルに書き込まれます。
さらにいくつかのメモ: ildasm オプション: /nologo /quiet /out:MyTest.dll MyTest.il /unicode /DLL /resource=MyTest.res /optimize
ilasm オプション: /nologo /out:C:\temp\CpCsh.dll "MyTest.il" /DLL
どんな助けでも大歓迎です!
compilation - 3番地コード(TAC / 3AC)
読書をしていると、「中級言語」と「3AC」という言葉に出くわしました。
私が理解しているように、ILはソースコードコンパイルプロセスの中間の「ステップ」です。具体的には、バイトコード(Java)とCについて読んでいます。
私がそれを解釈する方法(間違っている場合は私を訂正してください)は次のとおりです。
ソースコード1(例:Lisp)->中間言語(C)->アセンブリ言語->機械語
ソースコード2(例:Java)->バイトコード->Java仮想マシン
そのため、それに基づいて、3番地コード(TAC / 3AC)がどこで機能し、何が使用されるのかを確認するのに苦労しています。
.net - その場でILコードを変更する
既存のクラスの.NetILコードをその場で変更したい。それはどういうわけか可能ですか?.NetプロファイリングAPIへの参照をいくつか見つけましたが、ドキュメントによると、自己変更アプリケーションをサポートしていません。主な目的は、一部のプロパティのゲッターとセッターを置き換えることです。ヒントをいただければ幸いです。
乾杯、アキム