使用泛型从C#dll调用函数会出现错误-2147467261

时间:2014-11-17 01:04:18

标签: c# excel vba

尝试使用某些依赖于Excel VBA中对泛型方法的调用的C#代码给出了错误“-2147467261”。如果我评论使用泛型方法的代码行,它不会给出错误,但显然代码不起作用。

这是我的C#代码接口:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("663E1E2C-0436-4B23-BB71-8CCEEB92841A")]
public interface _Interop
{
    double Generation();
    void SetSeed(int n);
    int GetSeed();
    void AddCity(int x, int y);
    void SetPopulation(int n);
    int GetPopulation();

    void SetMutation(int n);
    int GetMutation();
}

我的中间类用于调用其余代码

[ClassInterface(ClassInterfaceType.None)]
[Guid("F8827AA5-2983-4885-AEB8-F873562A146F")]
[ProgId("GeneticAlgorithmTSP.Interop")]
public class Interop : _Interop
{
    (...)
    public void SetPopulation(int n)
    {
        SimpleSubjects.Randomize(n);
    }
    (...)
}

randomize函数在数组上调用此扩展泛型方法来对其进行混洗。

public static void Shuffle<T>(this IList<T> list)
{
    int n = list.Count;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
    }
}

最重要的是,在代码的后面,使用了Array.Sort和LINQ的扩展方法,并且那些也会抛出相同的错误。

如何在Excel的VBA中使用这些方法?

编辑:

public static class SimpleSubjects
{
    public static int[][] Tours { get; private set; }

    public static void Randomize(int ammount)
    {
        int cities = SimpleCities.Cities.Length;
        Tours = new int[ammount][];

        for (int i = 0; i < ammount; i++) {
            var Order = new int[cities];
            for (int j = 0; j < cities; j++)
            {
                Order[j] = j;
            }
            Order.Shuffle();
            Tours[i] = Order;
        }
    }
    (...)
}

0 个答案:

没有答案