問題タブ [dynamicmethod]
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.
c# - 複数の式を高速なメソッドに結合するにはどうすればよいですか?
次の式があるとします。
これらを次と同等のメソッド/デリゲートにコンパイルできるようにしたいと思います。
これにアプローチする最良の方法は何ですか?理想的には、上記の方法と同等のパフォーマンスで、うまく機能することを望みます。
更新 C#3でこれを直接行う方法はないようですが、System.Reflection.Emitで使用できるように式をILに変換する方法はありますか?
c# - DynamicMethod NullReferenceException
ここで私のILコードの何が問題なのか誰か教えてもらえますか?
上記と同じことを行うテストアプリをC#で書いたので、ここで夢中になります.上記の列挙型のプライベート値フィールドの代わりにパブリック フィールドを持つ TestStruct ですが、skipVisibility を true に設定しています)...
NullReferenceException が発生します。
私の DynamicMethod の署名は次のとおりです。
次のようなメソッドを生成します。
そして、私は絶対にnullを渡していません。
前もって感謝します!
c# - JITコンパイラエラー-Reflection.Emitを使用した無効なプログラム例外
誰かが私に、次が最初のテストで機能するのに、2番目のテストでInvalidProgramExceptionをスローする理由を説明できますか?私は困惑しています。
}
.net - イベントをサブスクライブするときに値を渡し、イベントがトリガーされたときに値を取得する方法 (DynamicMethod の使用上の問題)
タスクは、実行時にイベント ハンドラーを作成することです。イベントごとに異なるパラメーター値で呼び出される 1 つのメソッドが必要です。イベントとその数は、実行時にのみ認識されます。そのため、それぞれが何らかのイベントに割り当てられる動的メソッドを生成しようとしていますが、一般に、それらはすべてインスタンス メソッドに何らかの値を渡して呼び出すだけです。
同様のことがより簡単な方法で実行できれば素晴らしいことです。サブスクライブ段階で何らかの値を渡し、イベントがトリガーされたときにそれを取得することを意味します。
これは私が今やろうとしていることです:
.net - DynamicMethod をセキュリティ クリティカルにするにはどうすればよいですか?
メモリ内の AssemblyBuilder のクラスにアタッチされた DynamicMethod を作成したいというかなり複雑なシナリオがあります。動的メソッドは、私の(通常の)アセンブリでメソッド「GetReplacement」を呼び出します。
これは .NET 2.0 では問題なく動作しましたが、.NET 4.0 では次のエラーが発生します。
私が読んだことから、動的メソッド (上記のエラーの Max) は、それがアタッチされているアセンブリ (AssemblyBuilder) が透過的であるため、セキュリティ透過的です。AssemblyBuilder は動的アセンブリであるため、透過的だと思います。
動的メソッドをクリティカルにする方法、または GetReplacement を呼び出す権限を付与するために必要なことを行う方法は? GetReplacement のアセンブリで呼び出したいメソッドが他にもいくつかあるので、何らかの方法で GetReplacement をマークするよりも、動的メソッドを修正する方がよいでしょう。
私は少し道に迷っており、何か助けていただければ幸いです。
c# - c# + 属性で dynamicmethod を使用する
c# で DynamicMethod を使用して上記をどのように記述できますか?
アップデート; casperOne ごとに、カスタム属性でこれを行うことはできません。
しかし、次のような非カスタム属性はどうでしょうか。
注: 最後の投稿でポイントを逃したため、新しい投稿を作成しました。
また、DynamicMethod の使用について尋ねたのですが、もっと良い方法はありますか?
vb.net - コード生成を使用してハンドラーを動的に追加することにより、イベントをキャッチします
アプリケーション内のすべてのイベントをフックして、すべての情報(発生、引数など)を追跡する必要があります。
Stackoverflowでこれを見つけました: VB.NETのすべてのイベントをトレースします
ただし、呼び出されたイベントをコンソールに書き込むだけでなく、senderとeventargsを示すパラメーターを使用してTraceVerboseを呼び出すソリューションが必要です。
私はまだ動的コード生成とILを理解するために取り組んでいるので、イベントからのパラメーターを使用してトレースメソッドを呼び出すコードを取得する方法についての手がかりがありません。
誰かがこれを行う方法を教えてもらえますか(VB.NETで)?
c# - DynamicMethodからILバイトアレイを取得するにはどうすればよいですか?
ちょっとした目新しさとして、実行時に生成された軽量コードとVSコンパイラによって生成されたコードとのILの外観がどのように異なるかを確認しようとしています。これは、VSコードが次のような異なるパフォーマンスプロファイルで実行される傾向があることに気付いたためです。キャスト。
だから私は次のコードを書きました::
残念ながら、GetMethodBodyは明らかに式ツリーによって生成されたコードに対する不正な操作であるため、これは例外をスローします。ライブラリ方式で(つまり、ツールにAPIがない限り、外部ツールを使用しないで)軽量codegenを使用してコードによって生成されたコードを確認するにはどうすればよいですか?
編集:エラーは5行目で発生します。compiled.Method.GetMethodBody()は例外をスローします。
Edit2:メソッドで宣言されたローカル変数を回復する方法を知っている人はいますか?または、GetVariablesにアクセスする方法はありませんか?
c# - IL で見つかったトークンを動的メソッドから解決する
ここで私の質問に答えてくれた Hans Passant に感謝します: How do I get an IL bytearray from a DynamicMethod?
私は立ち上がって実行することができました。現在、発行された IL で見つかったメタデータ トークンを解決して、どのメソッドが呼び出されているか、または呼び出されていないかを確認しようとしています。メソッド本体の次のトークンが呼び出しであることを解決できました。Mono.Reflection
の MethodBodyReader の コードを使用しています。
トークンがそのドメインで解決できないことを示す例外をスローします。ここでトリックを持っている人はいますか?デリゲートのジェネリック パラメータを渡してみる必要がありますか、それともまったく役に立ちませんか?
私は現在、式ツリーへのデリゲート用の逆コンパイラを作成するというアイデアをいじっています。いつでも元に戻って比較できるように、自分でコンパイルした式ツリーをテスト ケースとして使用できるようにしたいと考えています。
c# - DynamicMethodを使用したランタイムコードインジェクション?
次の些細なコードを考えてみましょう。
私がやりたいのは、Fooデリゲートにデバッグコードを挿入することです。これは次のようになります。
ツイストは、実行時にこれを実行できる必要があるため、コンパイル時と後処理の方法は問題外です。
私の最初のアプローチでは、Delegate.Combine()を使用して、プロローグメソッドとエピローグメソッドをFooデリゲートに追加しました。残念ながら、これは戻り値を変更するため機能しません。
私の現在のアイデアは、潜在的なソリューションとしてSystem.Reflection.EmitとDynamicMethodを使用することです。私が知る限り、FooImplementationのMethodInfoを取得し、そのMethodBodyを取得し、それをDynamicMethodに変換して、try-finallyブロックをそれに挿入する必要があります。
残念ながら、これを行う方法がまったくわかりません。手を貸してくれる人はいますか?または、別の(できればもっと単純な)アイデアがありますか?
編集:ここでのユースケースは、OpenGLバインディング(http://www.opentk.com)のデバッグです。パラメータが大きく異なる2226メソッドを注入する必要があるため、一般的なアプローチが必要です。