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);
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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.
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.
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
};
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
BioAPI_MEMORY_FUNCS.Free_f
BioAPI_MEMORY_FUNCS.Reallo
BioAPI_MEMORY_FUNCS.Calloc
BioAPI_MEMORY_FUNCS.Allocr
end.
ASKER
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(hMo dule,
NULL, NULL,
state_callback, &callbac_ctx);
I really appreciate all the help.
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(hMo
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.
"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?
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?
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