Использование ctypes в python для доступа к методам C # dll

Я хотел бы реализовать код C # в критически важной части моей программы Python, чтобы сделать ее быстрее. говорит (в документации Python и этот сайт ), что вы можете загрузить библиотеку динамической компоновки (и, так сказать, PyDocs) следующим образом:

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

Это часть моего кода, которая отвечает за эту функцию:

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

И RECERCATOOLS.dll, который я использую, это (код C #, а не C или 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;
    }
}

Чтобы создать эту DLL, я используйте команду «Build» над проектом Visual Studio 2010, который содержит только этот файл и ссылку на «Karlstools», модуль, который позволяет мне использовать комплексные числа.

Я не знаю почему, но когда я пытаюсь запустить мой код Python просто выдает исключение:

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

Мне нужна помощь с этим, поскольку он продолжает выдавать мне исключения, даже если все установлено на public , а функция - как static , или е даже если я попытаюсь получить доступ к функции напрямую без указания класса "Program" ... Я не знаю, где может быть проблема.

9
задан Cœur 20 July 2017 в 15:21
поделиться