2011-09-14 13 views
6

मैं अपने कार्य को एक डीएल में एक्सेस करने का प्रयास कर रहा हूं और इसमें मूल्य को पूर्णांक के रूप में पास कर रहा हूं। लेकिन मैं के रूप में एक ValueError हो रही है:मेरे फ़ंक्शन में बहुत सारे तर्क - पायथन

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

मेरे अजगर .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 के अनुसार , इस अपवाद (stdcall की cdecl बजाय) एक गलत फोन करने सम्मेलन की वजह से उठाया जा सकता है। लेकिन फ़ंक्शन अभी भी कहा जाता है (केवल एक प्रकार की चेतावनी: एस)

सुनिश्चित करें कि आप अपने डीएल में घोषणा करते हैं।

यदि आप windll के साथ अपनी लाइब्रेरी लोड करते हैं, तो इसे stdcall कॉलिंग सम्मेलन का उपयोग करना चाहिए, अन्यथा, cdll मॉड्यूल का उपयोग करें।

+0

दुर्भाग्यवश, एक ही त्रुटि को छोड़ दिया। – Neophile

+1

@ Nerds.Dont.Swear: आपके डीएल में कॉलिंग कन्वेंशन का उपयोग कर रहे हैं (cdecl/stdcall) जैसा कि मैंने अपने संपादन में उल्लेख किया है। –

+0

मेरे मामले में, मैं अपनी लाइब्रेरी लोड करने के लिए विंडल का उपयोग कर रहा हूं। जिस तरह से मैं अपना काम कॉल करने की कोशिश कर रहा हूं उससे अलग कैसे होगा? – Neophile

संबंधित मुद्दे