2011-09-14 59 views
6

我想在dll中訪問我的函數並按值傳遞它作爲整數。但是,我得到一個ValueError爲:在我的函數中太多參數 - Python

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

我的Python的.py腳本如下:

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

...

我的DLL中的實際功能就像是一個簡單的函數:

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

...

看起來像一個簡單的問題,但我猜我錯過了一些東西。請幫助。

乾杯。

回答

3

看起來奇怪,因爲整數應自動轉換,但有一個func2(c_int(3))

編輯嘗試: 按照ctypes doc,這種異常可能是因爲一個錯誤的調用約定的提高(中CDECL,而不是STDCALL)。但功能仍然被稱爲(只是一種警告:s)

請確保你在你的dll聲明。

如果使用windll加載庫,則必須使用stdcall調用約定,否則使用cdll模塊。

+0

給它一個去,不幸的是同樣的錯誤。 – Neophile

+1

@ Nerds.Dont.Swear:看看你正在使用的調用約定(cdecl/stdcall),正如我在編輯中提到的那樣。 –

+0

就我而言,我正在使用windll加載我的庫。它與我試圖調用我的函數的方式有什麼不同? – Neophile