環境: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
}
}
}
「我不斷收到價值錯誤。」什麼樣的錯誤?你在哪裏得到它們?另外,你爲什麼首先嚐試使用'varagrs'和IL? – svick
我試着從C#調用你的方法(使用'__arglist'),它工作正常。所以這個問題在別的地方,可能在ExcelDNA或者你使用它的方式。 – svick
@svick:感謝至少證明它的工作原理。可悲的是,正如Govert在「答案」中所說的那樣,ExcelDNA不支持params/ParamArray。 – bugmagnet