handling return codes from CTYPES

Steve Simmons square.steve at gmail.com
Mon Jan 21 11:46:07 CET 2013


PY33, Win7, Python Newbie, Not homework:-)

I'm trying to use some 'C' DLLs from Python using ctypes and I have a 
minor issue with the return valuesbut  I am new to Python; ctypes and 
using DLLs so I am at the bottom of so many learning curves, I'm not 
sure where or how to find my mistake.
When I call the DLL, I am expecting a return of 1 (success) or a 
negative number (one of a set of error conditions)the return value is 
specified as 'short' in the DLL call specification - "short InitScanLib 
(const char * szLicense)".   What I get back is either a 1 or something 
like 65535.  This implies that I am receiving the expected value (-1) 
but 'something' is being lost in the translation.  The code is asper the 
snippet below:

 >>> from ctypes import *
 >>> sLib = cdll.slib
 >>> lic_key = c_char_p("asdfghjkl".encode(encoding='utf_8', 
errors='strict'))
 >>> initResult = sLib.InitScanLib(lic_key.value)
 >>> print("InitScanLib Result:  ", initResult)
InitScanLib Result:   65535
 >>>

I've tried declaring initResult as c_short by: inserting...

 >>> initResult = c_short(0)

... before the call to sLib.InitScanLib but I still get the same 
response (65535).

Interactively, I can see ...
 >>> c_short(65535)
c_short(-1)
 >>> c_short(-1)
c_short(-1)
 >>>

It's not a critical issue because I only want the return value to 
lookupa textual error message but I do want to understand what's going 
on. Any input appreciated.











More information about the Python-list mailing list