Extension C module

Jay Love jslove at mindspring.com
Mon Mar 6 22:20:54 EST 2000


vmarkwart at my-deja.com wrote:

> Hi,
> A couple of strange things. The extension module I'm (attempting) to
> write (Borland's C++ Builder 4) has a couple of little flaws.
> 
> When I include
>   Py_INCREF(Py_None);
>   return Py_None;
> in a procedure which returns no value, it compiles correctly but
> returns a memory exception error when imported and run, and crashes
> Python (not a happy sight). When I leave those lines out and return an
> empty string the function can be called happily from Python, but
> returns an unloved, unwanted empty string. Any ideas on what I'm doing
> wrong.?
> 
> Also, I have another function which returns a dictionary of values, eg
> >>> import pytools
> >>> pytools.volumeInfo("f:\\")
> {'filenameUnicode': 'supported', 'filenameMaxLength': '255',
> 'volumeName': 'SYS', 'filenameCase': 'preserved', 'volumeCompression':
> 'compressed', 'filenameCompression': 'supported', 'volumeSerialNumber':
> '1628725518', 'filesystemName': 'NWFS', 'filenameCaseSensitivity':
> 'caseSensitive', 'filesystemACLs': 'supported'}
> 
> In interactive mode everything looks fine, but when run in a script it
> comes back with the error:
> Traceback (innermost last):
>   File "", line 1, in ? File "pytoolstest.py", line 32, in ? vinfo = 
> pytools.volumeInfo(drive) TypeError: argument 1: expected string without 
> null bytes, string found Any clues as to where to start looking? I've 
> commented out virtually everything in the function, and I still get the 
> error. If anyone wants the sourcecode, please email me at 
> vmarkwart at hotmail.com Cheers Victor Sent via Deja.com 
> http://www.deja.com/ Before you buy.
> 

I'm working through the same problem right now.  Same situation, when I 
call Py_INCREF(Py_None), it segfaults.  I'm using Borland C++ 5.02 and 
Borland Builder 3.  Same deal with both compilers.

I started writing my main extension module without realizing this 
problem, so I started a new module with just one test function.  After 
much trial and error, I got the test function to run without 
segfaulting, but I can't figure out what magical set of compiler 
switches did it.  One thing I did was use the standard python import 
library, but run COFF2OMF on it, to convert from MSVC format to Borland 
format.  After that I set something in the Builder setup that got it to 
work on the test extension, but I can't get it going on my real extension.

I suspect it was the library change that did it, but I'm not sure.

Anybody out there who can help?

Jay Love





More information about the Python-list mailing list