À l'aide de ctypes en python pour accéder à un C# dll méthodes

Je tiens à mettre en œuvre le code C# dans une partie essentielle de mon programme en python pour le rendre plus rapide. Il dit (à la documentation Python et ce site) que vous pouvez charger une Bibliothèque de liens Dynamiques (et donc, dire que le PyDocs) comme suit:

cdll.LoadLibrary("your-dll-goes-here.dll")

C'est la partie de mon code qui prend en charge cette fonctionnalité:

from ctypes import *
z = [0.0,0.0]
c = [LEFT+x*(RIGHT-LEFT)/self.size, UP+y*(DOWN-UP)/self.size]
M = 2.0

iterator = cdll.LoadLibrary("RECERCATOOLS.dll")

array_result = iterator.Program.ITERATE(z[0],z[1],c[0],c[1],self.iterations,M)

z = complex(array_result[0],array_result[1])
c = complex(array_result[2],array_result[3])
last_iteration = int(round(array_result[4]))

Et la RECERCATOOLS.dll que j'utilise est la suivante (code C#, C ou C++):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KarlsTools;

public class Program
{
    public static Array ITERATE(double z_r,double z_i,double c_r,
                        double c_i, int iterations, 
                        double limit)
    {
        Complex z = new Complex(z_r, z_i);
        Complex c = new Complex(c_r, c_i);

        for (double i = 1; Math.Round(i) <= iterations; i++)
        {
            z = Complex.Pow(z, 2) + c;
            if (Complex.Abs(z) < limit)
            {
                double[] numbers = new double[] { Complex.Real(z),
                                                  Complex.Imag(z),
                                                  Complex.Real(c),
                                                  Complex.Imag(c),
                                                  i};
                return numbers;
            }
        }
        double iter = iterations;
        double[] result = new double[]        { Complex.Real(z),
                                                  Complex.Imag(z),
                                                  Complex.Real(c),
                                                  Complex.Imag(c),
                                                  iter};
        return result;
    }
}

Pour construire cette DLL d'utilisation de la "construction" de la commande sur le projet Visual Studio 2010, qui contient ce fichier et une référence à "Karlstools", un module qui me permet d'utiliser les nombres complexes.

Je ne sais pas pourquoi, mais lorsque j'essaie d'exécuter mon code Python, c'est juste déclenche une exception:

    [...]
    array_result = iterator.Program.ITERATE(z[0],z[1],c[0],c[1],self.iterations,M)
  File "C:\Python32\lib\ctypes\__init__.py", line 353, in __getattr__
    func = self.__getitem__(name)
  File "C:\Python32\lib\ctypes\__init__.py", line 358, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'Program' not found

J'ai besoin d'aide à cet égard, car il garde en me jetant des exceptions, même avec tout est mis à public et la fonction comme static, ou même si j'essaie d'accéder à la fonction directement, sans préciser le "Programme" de la classe... je n'ai aucune idée d'où le problème pourrait être.

OriginalL'auteur Daniel Torramilans | 2011-07-16