2011-09-14 15 views
6

私はdllで自分の関数にアクセスしようとしていて、整数で値を渡しています。私のpythonの.pyスクリプトは以下の通りです私の関数の引数が多すぎます - Python

Procedure probably called with too many arguments (4 bytes in excess) 

func2.restype = c_int 
func2.argtypes = [c_int] 
func2(3) 

... DLL内

私の実際の関数のような単純な関数であるようしかし、私はとValueErrorを取得しています:

int DLLfun2(int argtest) { return argtest + 1; }; 

...

シンプルな問題のように見えますが、私は何かを逃していると思います。親切に助けてください。

乾杯。

答えて

3

は、整数を自動的にキャストしなければならないので、奇妙なルックスが、func2(c_int(3))

EDITにしてみてください:ctypes docによると、この例外が原因で間違った呼び出し規約(stdcallの代わりのCDECL)を向上させることができ 。しかし関数はまだ呼び出されています(ちょっとした警告:s)

dllで宣言してください。

windllでライブラリをロードする場合は、stdcall呼び出し規約を使用する必要があります。それ以外の場合はcdllモジュールを使用してください。

+0

残念ながら、同じエラーが発生しました。 – Neophile

+1

@ Nerds.Dont.Swear:あなたのdllで使用している呼び出し規約(cdecl/stdcall)を私の編集で述べたように見てください。 –

+0

私の場合、私は私のライブラリをロードするためにwindllを使用しています。私は私の機能を呼び出すこととどのように違うでしょうか? – Neophile