2012-12-18 49 views
1

環境:Windows 7中,ExcelDNA 0.30,.NET 4.0IL,varags和ExcelDNA

我仍然在試圖讓一個PARAMS/ParamArray參數的方法通過ExcelDNA在Excel工作。通過使用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 
     } 

    } 
} 
+1

「我不斷收到價值錯誤。」什麼樣的錯誤?你在哪裏得到它們?另外,你爲什麼首先嚐試使用'varagrs'和IL? – svick

+1

我試着從C#調用你的方法(使用'__arglist'),它工作正常。所以這個問題在別的地方,可能在ExcelDNA或者你使用它的方式。 – svick

+0

@svick:感謝至少證明它的工作原理。可悲的是,正如Govert在「答案」中所說的那樣,ExcelDNA不支持params/ParamArray。 – bugmagnet

回答

3

Excel-DNA(和Excel C API)目前不支持(版本0.30)的 'PARAMS' 可選參數。請參閱此討論以瞭解更多詳細信息和可能的解決方法:http://exceldna.codeplex.com/discussions/406719

+0

Excel-DNA CustomRegistration項目(https://github.com/Excel-DNA/CustomRegistration)現在支持'params'參數數組。 – Govert