Den Jean wrote:
On Tuesday 23 November 2004 11:13 am, Florian Klaempfl wrote:

 * dynamic arrays : TIntArray = array of integer.
    On Intel it works fine but on arm not.
    Bindhelp.pas provides TIntArray pascal helper functions to the binding that 
is written in C++

    eg. this C-code copies integers from the Qt Int Array to the Pascal dynamic 
Array of integer

---------------------------------------------------------------------------------------------------
    inline void copyQIntsToPInts(const QValueList<int> &qi, PIntArray pi)
  {
    int len = qi.count();
    int *ints;
    setIntsLength(pi, len); // this is call to a pascal SetIntsLength function
    ints = (int *)getIntsPtr(pi);  // this is a call to a pascal GetIntsPtr 
function
    for (int i = 0; i < len; i++)
      ints[i] = qi[i]; // here it crashes
  }
----------------------------------------------------------------------------------------------------

    I crashes when it uses the address returned by getintsptr
    GetIntsPtr is provided by bindhelp.pas:
----------------------------------------------------------------------------------------------------
  // Int array helpers
  function GetIntsPtr(const PA: TIntArray): Pointer; cdecl; export;
  begin
    Result := @PA[0];
  end;^

I fear the snapshot was created before a lot of dyn. array stuff was fixed.

----------------------------------------------------------------------------------------------------

It works on intel and not on arm. But when I change the definition of GetIntsPtr to:

----------------------------------------------------------------------------------------------------
  function GetIntsPtr(var PA: TIntArray): Pointer; cdecl; export;
  begin
    Result := @PA[0];
  end;
----------------------------------------------------------------------------------------------------

Then it works on the arm to. (changed const to var !)

By the way the definition of the pascal library function in the C++ library is:
----------------------------------------------------------------------------------------------------
  typedef void *PIntArray;
  typedef void *(*GetIntsPtr)(PIntArray pi);
  extern GetIntsPtr getIntsPtr;
----------------------------------------------------------------------------------------------------

* I am using the last arm snapshot you provided because the current cvs version does not compile

I know, but I've to get my arm working first :(




BTW: What OS do you run on your Zaurus? I've a lot of trouble with OZ 3.5.1 e.g. with that ridiculous dropbear ssh demon used by OZ 3.5.1


I have a Zaurus SL6000. As it is rather new, an upgrade was not a priority yet.
I haven't seen update roms for the SL6000 either.
The SL6000 has a libqte.so.2.3.2 and a libqpe.so.1.5.0



_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to