1

コンテキスト:Windows 7、ExcelDNA 0.30、.NET 4.0

私はまだExcelDNAを介してExcelでparams/ParamArrayアプローチを機能させようとしています。varagsを使用することで、System.ParamArrayAttributeとの関係を回避し、System.ArgIteratorでパスを追跡します。

悲しいことに、以下はコンパイルされますが、それでも機能しません。値エラーが発生し続けます。何かがおかしいですが、私はそれを理解するのに十分なこのアセンブラーを(まだ)知りません。何かアイデアはありますか?

.assembly extern mscorlib { } 
.assembly Test {} 
.module test.dll
.namespace VTest {
    .class public Test { 
        // Compute sum of undefined number of arguments 
        .method public static vararg int64 IntSum(/* all arguments optional */) 
        { 
            .locals init(valuetype [mscorlib]System.ArgIterator Args, 
                        unsigned int64 Sum, 
                        int32 NumArgs) 
            ldc.i8 0 
            stloc Sum    


            ldloca Args 
            arglist // Create argument list structure  
            // Initialize ArgIterator with this structure: 
            call instance void [mscorlib]System.ArgIterator::.ctor( 
               value class [mscorlib]System.RuntimeArgumentHandle) 

            // Get the optional argument count: 
            ldloca Args 
            call instance int32 [mscorlib]System.ArgIterator::GetRemainingCount() 
            stloc NumArgs 

            // Main cycle: 
          LOOP: 
            ldloc NumArgs 
            brfalse RETURN // if(NumArgs == 0) goto RETURN; 

            // Get next argument: 
            ldloca Args 
            call instance typedref [mscorlib]System.ArgIterator::GetNextArg() 

            // Interpret it as unsigned int64: 
            refanyval [mscorlib]System.UInt64 
            ldind.u8 

            // Add it to Sum: 
            ldloc Sum 
            add 
            stloc Sum // Sum += *((int64*)&next_arg) 

            // Decrease NumArgs and go for next argument: 
            ldloc NumArgs 
            ldc.i4.m1 
            add 
            stloc NumArgs 
            br LOOP 

          RETURN: 
            ldloc Sum 
            ret 
        } 

    }
}
4

1 に答える 1

3

Excel-DNA(およびExcel C API)は現在、「params」オプションのパラメーターをサポートしていません(バージョン0.30)。詳細と考えられる回避策については、このディスカッションを参照してください:http: //exceldna.codeplex.com/discussions/406719

于 2012-12-18T13:00:38.107 に答える