Tôi muốn triển khai mã C# trong phần quan trọng của chương trình python của tôi để làm cho nó nhanh hơn. Nó nói (trên giấy tờ Python và this site) mà bạn có thể tải một Dynamic Link Library (và do đó nói PyDocs) như sau:Sử dụng ctypes trong python để truy cập các phương thức của C# dll
cdll.LoadLibrary("your-dll-goes-here.dll")
Đây là một phần của mã của tôi rằng sẽ chăm sóc của tính năng này:
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]))
Và RECERCATOOLS.dll mà tôi sử dụng là này (code C#, không phải C hay 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;
}
}
xây dựng DLL này tôi sử dụng Lệnh "Xây dựng" trên dự án Visual Studio 2010, chỉ chứa tệp này và tham chiếu đến "Karlstools", một mô-đun cho phép tôi sử dụng các số phức.
Tôi không biết tại sao nhưng khi tôi cố gắng để chạy mã Python của tôi, nó chỉ ném một ngoại lệ:
[...]
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
Tôi cần giúp đỡ với điều này, vì nó giữ ném cho tôi trường hợp ngoại lệ ngay cả với tất cả mọi thứ được thiết lập đến public
và chức năng là static
hoặc thậm chí khi tôi cố gắng truy cập trực tiếp vào chức năng mà không chỉ định lớp "Chương trình" ... Tôi không có đầu mối nào có thể xảy ra sự cố.
[Switch Xuất khẩu] (https://sites.google .com/site/robertgiesecke/Home/uploads/unmanagedexports). [Xuất mã được quản lý là Không được quản lý] (http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged) (2007). – eryksun