Go Premium for a chance to win a PS4. Enter to Win


Converting C header file statements to Delphi

Posted on 2004-04-27
Medium Priority
Last Modified: 2012-11-10
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.


/* 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.....

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

Question by:rwcochran
  • 3
  • 2
  • 2
  • +1
LVL 26

Accepted Solution

Russell Libby earned 200 total points
ID: 10930845

The typedef for  _File should be PChar. It would also help to see what BioAPIMemoryFuncs is actually declared as, before making a judgement on the data type definition

LVL 26

Expert Comment

by:Russell Libby
ID: 10930869

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

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

LVL 11

Expert Comment

ID: 10930950
    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.
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 10932816
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 =
LVL 26

Expert Comment

by:Russell Libby
ID: 10933028

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.

  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;

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

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





Author Comment

ID: 10933397
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.

Expert Comment

ID: 38473456
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.

Expert Comment

ID: 38587869
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?

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …
Suggested Courses

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question