Solved

Converting C header file statements to Delphi

Posted on 2004-04-27
8
576 Views
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.

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);

0
Comment
Question by:rwcochran
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 26

Accepted Solution

by:
Russell Libby earned 50 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


Regards,
Russell
0
 
LVL 26

Expert Comment

by:Russell Libby
ID: 10930869

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
0
 
LVL 11

Expert Comment

by:robert_marquardt
ID: 10930950
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.
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

Author Comment

by:rwcochran
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 =
{
      _BioAPI_malloc,
      _BioAPI_free,
      _BioAPI_realloc,
      _BioAPI_calloc,
      NULL
};
0
 
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.


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.
0
 

Author Comment

by:rwcochran
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.
0
 

Expert Comment

by:asiasker
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.
0
 

Expert Comment

by:asiasker
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?
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
delphi parse string to params 3 122
select query - oracle 16 100
creating threads in delphi 1 104
tvirtualstringtree freeze when load too manny images 10 61
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
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…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

770 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