1

可変数の引数を受け取り、それらの合計を返す ILAsm 関数を作成しています。

.class public auto ansi TestSentinel
{
    .method public static vararg unsigned int64 Sum( /* all arguments are optional */ )
    {
        .locals init( value class [mscorlib]System.ArgIterator Args, 
                      unsigned int64 Sum, 
                      int32 NumArgs )
        ... 
        ldloc Sum
        ret
    }
}

dll は正常にコンパイルされますが、C# コードからこの関数を呼び出すことができません。で呼び出すと

var k = TestSentinel.Sum(1);

次のエラー メッセージが表示されます。

Error  The best overloaded method match for 'TestSentinel.Sum(__arglist, ...)' has some invalid arguments

そして、他の数の引数を使用すると、wrong argument numberメッセージを受け取ります。ILAsm 関数を呼び出す正しい方法は何ですか?

4

1 に答える 1

5

文書化されていない __arglist キーワードを使用する必要があります。

 var k = TestSentinel.Sum(__arglist(1));
 var l = TestSentinel.Sum(__arglist(1, 2, 3));

これはあまり役に立ちません。代わりに params 配列に注目してください。

于 2013-10-09T10:25:43.913 に答える