よし、というわけで、数日前に PARI ライブラリのプリミティブ ラッパーを書いてみることにしました。それ以来、私はctypes
dllをロードし、次のようなコードを使用して含まれている関数にアクセスする際にライブラリをいじっています:
from ctypes import *
libcyg=CDLL("<path/cygwin1.dll") #It needs cygwin to be loaded. Not sure why.
pari=CDLL("<path>/libpari-gmp-2.4.dll")
print pari.fibo #fibonacci function
#prints something like "<_FuncPtr object at 0x00BA5828>"
したがって、関数はそこにあり、アクセスできる可能性がありますが、何をしようとしても常にアクセス違反が発生します。例えば:
pari.fibo(5) #access violation
pari.fibo(c_int(5)) #access violation
pari.fibo.argtypes = [c_long] #setting arguments manually
pari.fibo.restype = long #set the return type
pari.fibo(byref(c_int(5))) #access violation reading 0x04 consistently
argtypes
ポインタを受け取るため の設定を含む、そのバリエーション。
Pari .dll は C で記述されており、ライブラリ内のフィボナッチ関数の構文はGEN fibo(long x)
.
これらのエラーを引き起こしているのは戻り値の型でしょうか?それは標準ではなくint
、PARI ライブラリに固有long
の型なのでしょうか? GEN
どんな助けでも大歓迎です。誰かがライブラリを正常にロードし、Python 内から任意の関数を使用できる場合は、教えてください。私はこれで何時間も過ごしました。
編集:ライブラリを初期化するのを忘れていたようです。すぐpari.pari_init(4000000,500000)
にエラーがなくなりました。今私の問題は、それが GEN オブジェクトを返すという事実にあります。これは問題ありませんが、それが指すアドレスを参照しようとすると、常に 33554435 であり、これはまだアドレスであると推測されます。さらにコマンドを試しています。何かの正しい値を取得できたら更新します。