Nikada nisam radeo sa C-om samo sa pascal.
Nasao sam program za automatsko prevodjenje C header u pascal, ali ne znam da li je on to lepo preveo.
celikapi.h
Code:
// CelikApi.h
//
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef EID_API
#define EID_API
#endif
//
// Constants
//
// Size of all UTF-8 fields in bytes
const int EID_MAX_DocRegNo = 9;
const int EID_MAX_IssuingDate = 10;
const int EID_MAX_ExpiryDate = 10;
const int EID_MAX_IssuingAuthority = 30;
const int EID_MAX_PersonalNumber = 13;
const int EID_MAX_Surname = 60;
const int EID_MAX_GivenName = 40;
const int EID_MAX_ParentGivenName = 25;
const int EID_MAX_Sex = 2;
const int EID_MAX_PlaceOfBirth = 25;
const int EID_MAX_StateOfBirth = 25;
const int EID_MAX_DateOfBirth = 10;
const int EID_MAX_CommunityOfBirth = 25;
const int EID_MAX_State = 3;
const int EID_MAX_Community = 25;
const int EID_MAX_Place = 25;
const int EID_MAX_Street = 36;
const int EID_MAX_HouseNumber = 5;
const int EID_MAX_HouseLetter = 2;
const int EID_MAX_Entrance = 3;
const int EID_MAX_Floor = 3;
const int EID_MAX_ApartmentNumber = 6;
const int EID_MAX_Portrait = 7700;
//
// Function return values
//
const int EID_OK = 0;
const int EID_E_GENERAL_ERROR = -1;
const int EID_E_INVALID_PARAMETER = -2;
const int EID_E_VERSION_NOT_SUPPORTED = -3;
const int EID_E_NOT_INITIALIZED = -4;
const int EID_E_UNABLE_TO_EXECUTE = -5;
const int EID_E_READER_ERROR = -6;
const int EID_E_CARD_MISSING = -7;
const int EID_E_CARD_UNKNOWN = -8;
const int EID_E_CARD_MISMATCH = -9;
const int EID_E_UNABLE_TO_OPEN_SESSION = -10;
const int EID_E_DATA_MISSING = -11;
const int EID_E_CARD_SECFORMAT_CHECK_ERROR = -12;
const int EID_E_SECFORMAT_CHECK_CERT_ERROR = -13;
//
// Structures
//
// NOTE: char arrays DO NOT have zero char at the end
typedef struct tagEID_DOCUMENT_DATA
{
char docRegNo[EID_MAX_DocRegNo];
int docRegNoSize;
char issuingDate[EID_MAX_IssuingDate];
int issuingDateSize;
char expiryDate[EID_MAX_ExpiryDate];
int expiryDateSize;
char issuingAuthority[EID_MAX_IssuingAuthority];
int issuingAuthoritySize;
} EID_DOCUMENT_DATA, *PEID_DOCUMENT_DATA;
typedef struct tagEID_FIXED_PERSONAL_DATA
{
char personalNumber[EID_MAX_PersonalNumber];
int personalNumberSize;
char surname[EID_MAX_Surname];
int surnameSize;
char givenName[EID_MAX_GivenName];
int givenNameSize;
char parentGivenName[EID_MAX_ParentGivenName];
int parentGivenNameSize;
char sex[EID_MAX_Sex];
int sexSize;
char placeOfBirth[EID_MAX_PlaceOfBirth];
int placeOfBirthSize;
char stateOfBirth[EID_MAX_StateOfBirth];
int stateOfBirthSize;
char dateOfBirth[EID_MAX_DateOfBirth];
int dateOfBirthSize;
char communityOfBirth[EID_MAX_CommunityOfBirth];
int communityOfBirthSize;
} EID_FIXED_PERSONAL_DATA, *PEID_FIXED_PERSONAL_DATA;
typedef struct tagEID_VARIABLE_PERSONAL_DATA
{
char state[EID_MAX_State];
int stateSize;
char community[EID_MAX_Community];
int communitySize;
char place[EID_MAX_Place];
int placeSize;
char street[EID_MAX_Street];
int streetSize;
char houseNumber[EID_MAX_HouseNumber];
int houseNumberSize;
char houseLetter[EID_MAX_HouseLetter];
int houseLetterSize;
char entrance[EID_MAX_Entrance];
int entranceSize;
char floor[EID_MAX_Floor];
int floorSize;
char apartmentNumber[EID_MAX_ApartmentNumber];
int apartmentNumberSize;
} EID_VARIABLE_PERSONAL_DATA, *PEID_VARIABLE_PERSONAL_DATA;
typedef struct tagEID_PORTRAIT
{
BYTE portrait[EID_MAX_Portrait];
int portraitSize;
} EID_PORTRAIT, *PEID_PORTRAIT;
//
// Functions
//
EID_API int WINAPI EidStartup(int nApiVersion);
EID_API int WINAPI EidCleanup();
EID_API int WINAPI EidBeginRead(LPCSTR szReader);
EID_API int WINAPI EidEndRead();
EID_API int WINAPI EidReadDocumentData(PEID_DOCUMENT_DATA pData);
EID_API int WINAPI EidReadFixedPersonalData(PEID_FIXED_PERSONAL_DATA pData);
EID_API int WINAPI EidReadVariablePersonalData(PEID_VARIABLE_PERSONAL_DATA pData);
EID_API int WINAPI EidReadPortrait(PEID_PORTRAIT pData);
#ifdef __cplusplus
};
#endif
preveden celikapi.pas
Code:
unit CELIKAPI;
interface
uses
{$IFDEF WIN32}
Windows;
{$ELSE}
Wintypes, WinProcs;
{$ENDIF}
{/// CelikApi.h }
{/// }
{ #pragma once }
{$IFDEF __cplusplus}
{$ENDIF}
{$IFNDEF WINAPI}
const
WINAPI = __stdcall;
{$ENDIF}
{$IFNDEF EID_API}
{$DEFINE EID_API}
{$ENDIF}
{/// }
{/// Constants }
{/// }
{/// Size of all UTF-8 fields in bytes }
{/// }
{/// Function return values }
{/// }
{/// }
{/// Structures }
{/// }
{/// NOTE: char arrays DO NOT have zero char at the end }
type
tagEID_DOCUMENT_DATA = record
docRegNo: Array[0..EID_MAX_DocRegNo-1] of Char;
docRegNoSize: Integer;
issuingDate: Array[0..EID_MAX_IssuingDate-1] of Char;
issuingDateSize: Integer;
expiryDate: Array[0..EID_MAX_ExpiryDate-1] of Char;
expiryDateSize: Integer;
issuingAuthority: Array[0..EID_MAX_IssuingAuthority-1] of Char;
issuingAuthoritySize: Integer;
end {tagEID_DOCUMENT_DATA};
type
tagEID_FIXED_PERSONAL_DATA = record
personalNumber: Array[0..EID_MAX_PersonalNumber-1] of Integer;
personalNumberSize: Integer;
surname: Array[0..EID_MAX_Surname-1] of Char;
surnameSize: Integer;
givenName: Array[0..EID_MAX_GivenName-1] of Char;
givenNameSize: Integer;
parentGivenName: Array[0..EID_MAX_ParentGivenName-1] of Char;
parentGivenNameSize: Integer;
sex: Array[0..EID_MAX_Sex-1] of Char;
sexSize: Integer;
placeOfBirth: Array[0..EID_MAX_PlaceOfBirth-1] of Char;
placeOfBirthSize: Integer;
stateOfBirth: Array[0..EID_MAX_StateOfBirth-1] of Char;
stateOfBirthSize: Integer;
dateOfBirth: Array[0..EID_MAX_DateOfBirth-1] of Char;
dateOfBirthSize: Integer;
communityOfBirth: Array[0..EID_MAX_CommunityOfBirth-1] of Char;
communityOfBirthSize: Integer;
end {tagEID_FIXED_PERSONAL_DATA};
type
tagEID_VARIABLE_PERSONAL_DATA = record
state: Array[0..EID_MAX_State-1] of Char;
stateSize: Integer;
community: Array[0..EID_MAX_Community-1] of Char;
communitySize: Integer;
place: Array[0..EID_MAX_Place-1] of Char;
placeSize: Integer;
street: Array[0..EID_MAX_Street-1] of Char;
streetSize: Integer;
houseNumber: Array[0..EID_MAX_HouseNumber-1] of Char;
houseNumberSize: Integer;
houseLetter: Array[0..EID_MAX_HouseLetter-1] of Char;
houseLetterSize: Integer;
entrance: Array[0..EID_MAX_Entrance-1] of Char;
entranceSize: Integer;
floor: Array[0..EID_MAX_Floor-1] of Char;
floorSize: Integer;
apartmentNumber: Array[0..EID_MAX_ApartmentNumber-1] of Char;
apartmentNumberSize: Integer;
end {tagEID_VARIABLE_PERSONAL_DATA};
type
tagEID_PORTRAIT = record
portrait: Array[0..EID_MAX_Portrait-1] of BYTE;
portraitSize: Integer;
end {tagEID_PORTRAIT};
{/// }
{/// Functions }
{/// }
var
EidStartup: function(nApiVersion: Integer): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidCleanup: function: EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidBeginRead: function(var szReader: CSTR): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidEndRead: function: EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidReadDocumentData: function(var pData: EID_DOCUMENT_DATA): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidReadFixedPersonalData: function(var pData: EID_FIXED_PERSONAL_DATA): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidReadVariablePersonalData: function(var pData: EID_VARIABLE_PERSONAL_DATA): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
var
EidReadPortrait: function(var pData: EID_PORTRAIT): EID_API {$IFDEF WIN32} stdcall {$ENDIF};
{$IFDEF __cplusplus}
{$ENDIF}
var
DLLLoaded: Boolean { is DLL (dynamically) loaded already? }
{$IFDEF WIN32} = False; {$ENDIF}
implementation
var
SaveExit: pointer;
DLLHandle: THandle;
{$IFNDEF MSDOS}
ErrorMode: Integer;
{$ENDIF}
procedure NewExit; far;
begin
ExitProc := SaveExit;
FreeLibrary(DLLHandle)
end {NewExit};
procedure LoadDLL;
begin
if DLLLoaded then Exit;
{$IFNDEF MSDOS}
ErrorMode := SetErrorMode($8000{SEM_NoOpenFileErrorBox});
{$ENDIF}
DLLHandle := LoadLibrary('CELIKAPI.DLL');
if DLLHandle >= 32 then
begin
DLLLoaded := True;
SaveExit := ExitProc;
ExitProc := @NewExit;
@EidStartup := GetProcAddress(DLLHandle,'EidStartup');
{$IFDEF WIN32}
Assert(@EidStartup <> nil);
{$ENDIF}
@EidCleanup := GetProcAddress(DLLHandle,'EidCleanup');
{$IFDEF WIN32}
Assert(@EidCleanup <> nil);
{$ENDIF}
@EidBeginRead := GetProcAddress(DLLHandle,'EidBeginRead');
{$IFDEF WIN32}
Assert(@EidBeginRead <> nil);
{$ENDIF}
@EidEndRead := GetProcAddress(DLLHandle,'EidEndRead');
{$IFDEF WIN32}
Assert(@EidEndRead <> nil);
{$ENDIF}
@EidReadDocumentData := GetProcAddress(DLLHandle,'EidReadDocumentData');
{$IFDEF WIN32}
Assert(@EidReadDocumentData <> nil);
{$ENDIF}
@EidReadFixedPersonalData := GetProcAddress(DLLHandle,'EidReadFixedPersonalData');
{$IFDEF WIN32}
Assert(@EidReadFixedPersonalData <> nil);
{$ENDIF}
@EidReadVariablePersonalData := GetProcAddress(DLLHandle,'EidReadVariablePersonalData');
{$IFDEF WIN32}
Assert(@EidReadVariablePersonalData <> nil);
{$ENDIF}
@EidReadPortrait := GetProcAddress(DLLHandle,'EidReadPortrait');
{$IFDEF WIN32}
Assert(@EidReadPortrait <> nil);
{$ENDIF}
end
else
begin
DLLLoaded := False;
{ Error: CELIKAPI.DLL could not be loaded !! }
end;
{$IFNDEF MSDOS}
SetErrorMode(ErrorMode)
{$ENDIF}
end {LoadDLL};
begin
LoadDLL;
end.