[fpc-devel] Armel problems

Den Jean Den.Jean at telenet.be
Mon May 17 22:22:13 CEST 2010


I am investigating why Qt on armel has problems.

I think that one of the problems is 
that when c-functions are called from 
pascal that the parameters are not passed 
correctly (or not as I expected and accommodated for).

I noticed that when the parameter is a 
"<procedure variable type of procedure of object;CDecl>"
like @MyMethod  (method of a class, with a cdecl decoration)
that the c-functions do not get the correct addresses.

When I change the pascal definition of the external c-function
and replace the "procedure () of object cdecl;" with
2 pointer parameters (MethodFunc,MethodData:Pointer) and
use (@TClass.MyMethod,Self) ... well then it works fine.

In the C-library I expect to receive a struct 
that I declared like this:
typedef struct {
  void *func;
  void *data;
} QHook;

type QAbstractButton_clicked2_Event = procedure () of object cdecl;
// when c-function declared like this
procedure QAbstractButton_hook_hook_clicked2(handle: QAbstractButton_hookH; hook: QAbstractButton_clicked2_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked2';
// then this call does not work
QAbstractButton_hook_hook_clicked2(Hook, at MyMethod);

// when c-function declared like this
procedure testhook(handle: QAbstractButton_hookH; HookFunc,HookData:Pointer); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked2';
// then this works in constructor of TMyClass
testhook(Hook, at TMyClass.MyMethod,self)

fpc: latest svn, compiled with -dFPC_ARMEL
Code:{$mode objfpc}{$H+}

kind regards,

Den Jean

More information about the fpc-devel mailing list