Python for Delphi problem

Greg Chapman glc at well.com
Wed Feb 12 10:53:42 EST 2003


On Wed, 12 Feb 2003 00:21:52 GMT, Kyle Yancey <kyle at lakeofburningfire.org>
wrote:

>Thanks, that's much nicer.  I was explicitly copying the string,
>because I kept getting an error saying that I was writing to some
>memory location.  Since the PyString_AsString function returned a
>pointer to the internal buffer, I thought that that might be the
>problem.  I think I've found the real problem though.  I was DECREFing
>the pyItem returned from pyList.  PyList_GetItem returns a borrowed
>reference not a new one, so it shouldn't be DECREFed.  This code gives
>no EAccessViolations and works perfectly.  Thanks for all your help.
>

Well, you're right -- I should have been more careful about refcounts (sorry
about that).  Partly so I wouldn't have to worry about the refcounting rules in
all my client code, I actually wrote my own interface between Delphi 5 and
python which uses Delphi interfaced objects to hold the python objects.  It's
not as fast as the PythonforDelphi code, since every Python object has to be
wrapped by a Delphi object, but it makes for nicer looking code:

procedure GetModKeys(const Interp: IPyInterpreter; const Modname: string; 
    Dest: TStrings);
var Keysiter: IPyIterator;
begin
  Keysiter:= Interp.ImportModule(Modname).GetAttr('__dict__').GetIterator;
  Keysiter.AsStrings(Dest, false);
end;

---
Greg Chapman





More information about the Python-list mailing list