Контекст: Windows 7, ExcelDNA 0.30, .NET 4.0
Я все еще пытаюсь заставить работать params/ParamArray в Excel через ExcelDNA. Используя 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? - person svick   schedule 18.12.2012__arglist
), и он работал нормально. Так что проблема где-то в другом месте, возможно, в ExcelDNA или в том, как вы его используете. - person svick   schedule 18.12.2012