Mit ctypes in python den Zugriff auf eine C# dll ' s Methoden

Ich möchte zu implementieren C# - code in einem kritischen Teil meiner python-Programm, um es schneller zu machen. Es sagt (für Python-Dokumentation und diese Website) Sie können das laden einer Dynamic Link Library (und so sagen die PyDocs) wie folgt:

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

Dies ist der Teil von meinem code, der kümmert sich um dieses feature:

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]))

Und die RECERCATOOLS.dll dass ich benutze, ist dieses C# - code, der nicht C oder 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;
    }
}

Bauen diese DLL verwende ich "Build" - Befehl über die Visual-Studio-2010-Projekt, das nur enthält diese Datei und einen Verweis auf "Karlstools", ein Modul, das mir erlaubt die Verwendung komplexer zahlen.

Ich weiß nicht warum, aber wenn ich versuche zu laufen, meine Python-code, ist es nur eine exception wirft:

    [...]
    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

Ich brauche Hilfe mit diesem, da es hält, warf mich Ausnahmen auch mit allem, was festgelegt ist public und die Funktion als static oder auch, wenn wenn ich versuche, auf die Funktion direkt ohne die Angabe der "Programm" - Klasse... ich habe keine Ahnung, wo das problem sein könnte.

Schreibe einen Kommentar