Link to home
Start Free TrialLog in
Avatar of rwcochran
rwcochran

asked on

Converting C header file statements to Delphi

I need help converting two statements from a C header file to their Delphi equivalents.  The first one is the extern const statement below.  I'm not sure if this should be defined as a pointer or what.

The second statement is the typedef that I've attempted to convert...I just wanted someone to check it and let me know if it is correct.

Thanks

1.
/* Memory function tables */
extern const BioAPI_MEMORY_FUNCS BioAPIMemoryFuncs;

2. Original C statement...

 typedef void * (BioAPI *BioAPI_MALLOC) ( uint32 Size,
                                                              void * Allocref,
                                                              const char * File,
                                                              uint32 Line);

My converted Delphi equivalent.....

  type
    BioApi_Malloc = procedure( Size: Cardinal;
                                             Allocref: Pointer;
                                             Const _File: Char;
                                             Line: Cardinal);

ASKER CERTIFIED SOLUTION
Avatar of Russell Libby
Russell Libby
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial

This also returns a void (generic) pointer, so it is not a procedure

 type
    BioApi_Malloc = function(Size: Cardinal;
                                        Allocref: Pointer;
                                        Const _File: PChar;
                                        Line: Cardinal): Pointer;

Russell
Avatar of robert_marquardt
robert_marquardt

type
    BioApi_Malloc = function(Size: Cardinal;
                                        Allocref: Pointer;
                                        Const _File: PChar;
                                        Line: Cardinal): Pointer; stdcall;

To guess at the calling convention.

The other declaration is a global variable which is not easily accessible in Delphi.
Avatar of rwcochran

ASKER

Thanks for the help guys.  I found the BioAPIMemoryFuncs definition in another source file (see below)...how would this be converted to Delphi?

Thanks again....

/* Memory function tables */
const BioAPI_MEMORY_FUNCS BioAPIMemoryFuncs =
{
      _BioAPI_malloc,
      _BioAPI_free,
      _BioAPI_realloc,
      _BioAPI_calloc,
      NULL
};

Here is the delphi translation based on C source I found on the Net. Appears uou might have a newer definition, as the malloc function takes more parameters than the version I looked at. Also, are YOU are supposed to implement the memory functions on your side of this?? Hard to tell without seeing the full source, so I declared _BioPAPI_XXXX calls as variable types.


type
  TBioAPI_MALLOC       =  function(Size: Cardinal; Allocref: Pointer): Pointer; stdcall;
  TBioAPI_FREE         =  procedure(MemBlock: Pointer; Allocref: Pointer); stdcall;
  TBioAPI_REALLOC      =  function(Memblock: Pointer; Size: Cardinal; Allocref: Pointer): Pointer; stdcall;
  TBioAPI_CALLOC       =  function(Num: Cardinal; Size: Cardinal; AllocRef: Pointer): Pointer; stdcall;

type
  TBioAPI_MEMORY_FUNCS =  packed record
     Malloc_func:      TBioAPI_MALLOC;
     Free_func:        TBioAPI_FREE;
     Realloc_func:     TBioAPI_REALLOC;
     Calloc_func:      TBioAPI_CALLOC;
     AllocRef:         Pointer;
  end;

var
  _BioAPI_malloc:      TBioAPI_MALLOC; // These obviously need to be set
  _BioAPI_free:        TBioAPI_FREE;
  _BioAPI_realloc:     TBioAPI_REALLOC;
  _BioAPI_calloc:      TBioAPI_CALLOC;

  BioAPI_MEMORY_FUNCS: TBioAPI_MEMORY_FUNCS;


initialization

  BioAPI_MEMORY_FUNCS.Malloc_func:=@_BioAPI_malloc;
  BioAPI_MEMORY_FUNCS.Free_func:=@_BioAPI_free;
  BioAPI_MEMORY_FUNCS.Realloc_func:=@_BioAPI_realloc;
  BioAPI_MEMORY_FUNCS.Calloc_func:=@_BioAPI_calloc;
  BioAPI_MEMORY_FUNCS.Allocref:=nil;

end.
Very helpful....thanks.  As far as whether I have to implement the memory functions on my side or not, at this point I'm not sure.  

I'm just slowing working through the basic BioApi functions.... I'm trying to get to the point where I can talk to the fingerprint reader.  I ran into the BioAPIMemoryFuncs reference when working on the following function:

      bioReturn := BioAPI_ModuleAttach(uuid, bioVersion, BioAPIMemoryFuncs, 0,
                                  0, 0, 0, NULL, 0, NULL, &hModule);

I've already implemented the following BioApi functions and they seem to work fine.
  bioReturn := BioAPI_Init( bioVersion, 0, nil, 0, nil );
  bioReturn := BioAPI_ModuleLoad( uuid, 0, nil, nil);

The next BioApi function I'll be woking on is:
    bioReturn = BioAPI_SetGUICallbacks(hModule,
                                       NULL, NULL,
                                       state_callback, &callbac_ctx);

I really appreciate all the help.
hi rllibby,
"Here is the delphi translation based on C source I found on the Net"
i need translations of other files.. if you see them i wil be Thankfull.
hi rllibby and  rwcochran ,

rllibby :"Here is the delphi translation based on C source I found on the Net"
i need translations of other files.. if you see them i wil be Thankfull.

rwcochran , can you help to me  same problem as you already solved?