From: Thom D. <t.r...@la...> - 2007-02-07 22:29:17
|
> -----Original Message----- > From: Thom DeCarlo > Sent: Wednesday, February 07, 2007 4:38 PM > To: 'Swig-user email list' > Subject: Re: [Swig-user] Q: returning values in function parameters > > > > > -----Original Message----- > > From: Thom DeCarlo > > Sent: Wednesday, February 07, 2007 4:16 PM > > To: 'Swig-user email list' > > Subject: [Swig-user] Q: returning values in function parameters > > > > Ok, for my next stupid noobie question... > > > > I am wrapping a function whose return value indicates success or failure > > of > > an operation and places the result of the operation in one of the > function > > arguments. The Python book I'm using (Beginning Python: From Novice to > > Professional by Magnus Lie Hetland) seems to ignore this standard C > > feature. > > > > > > Can someone tell me how do I wrap the function and then how do I call > the > > function in python? > > > > The C++ function looks like this: > > > > BOOL GetHashIndex(std::string, unsigned long* index); > > > > SWIG doesn't seem to mind that definition. But when I try to call the > > function in Python I get: > > > > >>> nsm.GetHashIndex("latdeg", hashindex) > > Traceback (most recent call last): > > File "<stdin>", line 1, in ? > > File "pyNamedSharedMemory.py", line 113, in GetHashIndex > > def GetHashIndex(*args): return > > _pyNamedSharedMemory.utNamedSharedMemory_GetHashIndex(*args) > > TypeError: in method 'utNamedSharedMemory_GetHashIndex', argument 3 of > > type > > 'unsigned long *' > > >>> > > > > I can't find any guidance on how to pass the address of a variable to be > > set > > within the called function. Can anyone please hit me with a clue-stick? > > > > Thanks, > > Thom > > -- > > > > Nevermind. Shortly after sending this note I found section 29.7.1 in the > SWIGDocumentation.pdf file. That gave a pretty through answer to my > question. > > Sorry for using up the bandwidth. > > Thom > Better not put that clue-stick away just yet. One thing that we do a lot in our code does not seem to be covered in the SWIGDocumentation.pdf. We have many functions that return parameters of type "void *" which are then typecast into the appropriate type. I found the section on Pointer Handling (29.9.6), but I can't quite figure out how to make it work. My C++ function definition looks like this: BOOL GetVariableByIndex(int numBytes, unsigned long index, void* value, unsigned int offset = 0); The parameter "value" will need to be typecast into the appropriate type (for example, float) by the python script. Can anyone show me how to set up the interface file and then how the typecast is performed in python? Thanks! Thom |