問題タブ [ilgenerator]
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# - Object.Equals(Object、Object)でのNullReferenceException
状況
ILGeneratorを使用してラッパーを生成しています。Object.Equals(Object, Object)ラッパーフィールドの等式比較の実装に使用します。デバッガーはNullReferenceException、次のスタックトレースでをスローします。
Object.Equals(Object、Object)-分解
逆アセンブルでわかるようNullReferenceExceptionに、メソッド呼び出しがある部分に到達しないため、発生する可能性はありません。
考えられる問題
私が言ったように、ホールコードはILGeneratorを使用して生成され、これがエラーの唯一の原因である可能性があると思います。呼び出し元は内部に値型しかないため、オブジェクトがnullである可能性すらありません。
ILコードの呼び出し
c# - 生成されたコードを実行しようとしたときの例外
動的型のコンストラクターを実装していますが、コードを実行すると、ILコードが破損しているという例外がスローされます(FatalExecutionError)。
ILコード
作業部:
次のILコードを追加すると、エラーが発生します。それはコードと関係があるに違いありません、またはそれはこのコードの前のコードでのみ発生する他の奇妙な振る舞いです。
重要なのは、エラーの原因となる行(エラーの理由のようです)は単純なものasであり、C#と言えばそれ以上のものではありません。誰かがこの問題を解決するためのアイデアを持っているなら素晴らしいでしょう。
コードの生成
Castclass(編集)
OpCodes.Castclassエラーはスローされませんが、ランタイムが無効なオブジェクトをキャストしようとすると、もちろんランタイムエラーがスローされることに気付きました。
もう一つのクレイジーなこと(編集2)
Isinst最後のものを交換するとCastclass、エラーをスローせずに動作することにも気づきました。これにより、このエラーについてさらに疑問に思うようになります。キャストクラスを生成する行をコメントアウトすると、エラーが再び発生します。
c# - MethodBody.LocalVariables カウントがわかりにくい
次のようなローカル変数のない単純なメソッドの場合
MethodInfo.GetMethodBody().LocalVariables.Count = 2 のカウント なぜ? 別の switch ステートメントを追加すると、カウントが 3 になります なぜ?
ローカル変数は定義されていません。では、なぜ 2 と 3 なのか。また、j を指定した別の switch ステートメントがカウントを 2 に保つ場合。
c# - オブジェクトのプロパティ値を別のオブジェクトに転送する
何よりも、私はAutoMapperについて知っていますが、使用したくありません。私はC#を学んでいて、その詳細を知りたいからです。だから私はこの問題(以下で説明)を自分でやろうとしています。
ただし、プロパティの名前とタイプが同じで、ソースから読み取り可能で、ターゲットで書き込み可能な場合、あるタイプのプロパティの値を別のタイプのプロパティに対処するプロパティコピーを作成しようとしています。type.GetProperties()メソッドを使用しています。サンプリングされたメソッドは次のとおりです。
それはうまくいきますが、私は SO で答えを読みましSystem.Reflection.Emitた。しかし、それ以上の説明やリンクはありませんでした。このコードを高速化する方法を理解するのを手伝ってくれませんか? または、 、、およびレイト バインド デリゲートに関するリンクをいくつか提案していただけますか? または、私が対象とするのに役立つと思うものはありますか?ILGeneratorEmitILGenerator
完全な質問:
@svickの回答から多くのことを理解し、学びました。しかし、これをオープン ジェネリック メソッドとして使用したい場合は、どうすればよいでしょうか。このようなもの:
または拡張子:
c# - ILのジェネリック?
IL Generator でジェネリックを使用することは可能ですか?
c# - ILGeneratorを介したデリゲートメソッドの呼び出しが、「別のモジュールからグローバルメソッドまたはフィールドをインポートできません」で失敗しました。
基本的に、すべての呼び出しを別のクラスにリダイレクトするラッパークラスを生成しようとしています。+呼び出しの前後に引数/戻り値の変換を行います。しかし、呼び出しil.Emit( OpCodes.Call, base_method_caller.Method )はエラー「System.InvalidOperationException:別のモジュールからグローバルメソッドまたはフィールドをインポートできません」で失敗しました。委任は正しいです、私はそれを経由して呼び出すことができますo.DynamicInvoke(...)。Delegateを呼び出すためのEmit命令の書き方を知っている人はいますか?
c# - 型を動的に作成し、基底クラスのコンストラクターを呼び出す
クラスを動的に作成する必要があります。ほとんどのものは正常に動作しますが、コンストラクターの生成に行き詰まっています。
コンストラクターを呼び出すと、BadImageFormatException が発生します。私は何を間違っていますか?
リクエストに応じて:
BaseClass は次のようになります。
実行時の結果として私がしたいこと:
c# - ComplexTypes と dynamicwrapper
DynamicWrapperでは、この方法でインターフェイスをオブジェクトに関連付けることができます
このライブラリを拡張して、次のようなものを記述できるようにするにはどうすればよいですか
電話するために
MyTypeCopy は、別の名前空間にある MyType のコピーですか?
1つの解決策は追加することです
メソッドを呼び出す前に、キャスト (シリアライゼーション/デシリアライゼーション) をインターフェイスに適用します。
DynamicWrapper ライブラリ内でキャストを適用する DynamicMethod を追加する方法はありますか?
c# - Windows ストア アプリ API の .NET の Emit.OpCodes の目的は?
サードパーティ ライブラリをWindows ストア アプリ用の .NET に移植することを検討しています。ライブラリは、 ILGenerator.Emitメソッドのオーバーロードへの呼び出しを介してSystem.Reflection.Emit.OpCodesを過度に使用します。
.NET for Windows Store Apps API には、OpCode構造とOpCodesクラスが含まれていますが、クラスはありません。またILGenerator、私が見つけた限りでは、代替も見つかりませんでした。
私は明らかに何かが欠けていますが、ILGeneratorクラスがなければ、.NET for Windows Store apps API を含める目的System.Reflection.Emit.OpCodeは何ですかOpCodes?
.net - ILジェネレーターによって作成された場合、DLLアクセスはありません
ダミーのDLLを作成しました。S1名前空間でアクセスできると思っていました。私は自分の関数を見ることができ、exe形式のときにildasmで構造体を見ることができます。