pythonプログラムの重要な部分にC#コードを実装してより速くしたいと考えています。Pythonでctypesを使用してC#dllのメソッドにアクセスする
cdll.LoadLibrary("your-dll-goes-here.dll")
これは、この機能の世話をする私のコードの一部です:それは次のように(PyDocsをしてそう言う)ダイナミックリンクライブラリをロードすることができます(Pythonドキュメントとthis siteに)書かれています:私が使用することを
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をビルドするには"ビルド"コマンドは、このファイルと、複素数を使用できるモジュールである "Karlstools"への参照のみを含むVisual Studio 2010プロジェクトに適用されます。
私はなぜ知らないが、私は私の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
のように機能するか、「プログラム」クラスを指定せずに関数に直接アクセスしようとしても、問題がどこにあるのか分かりません。
:ここではサンプルのC#コードであります.com/site/robertgiesecke/Home/uploads/unmanagedexports)。 [マネージコードをアンマネージドとしてエクスポートする](http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged)(2007) – eryksun