[ sokomm @ 27.06.2010. 23:52 ] @
Da li i kako se moze upotrebiti CelikAPI.h i CelikAPI.dll u Delphiju radi citanja Licnih Karti ? http://www.mup.gov.rs/cms/resursi.nsf/CelikApi%20Windows%201.01.zip |
[ sokomm @ 27.06.2010. 23:52 ] @
[ savkic @ 28.06.2010. 01:13 ] @
> Da li i kako se moze upotrebiti CelikAPI.h i CelikAPI.dll u Delphiju radi citanja Licnih Karti ?
Bila je diskusija o tome ali u C++ grupi, ne znam koliko ti može pomoći ali ne može da škodi: http://www.elitesecurity.org/t372490. [ sokomm @ 28.06.2010. 01:46 ] @
Vec sam je prcitao ali mi nije pomoglo :(
[ abitbp6 @ 28.06.2010. 02:10 ] @
Potrebno je da prevedeš celikapi.h na Delphi. Koliko vidim, prevod na Delphi uopšte nije težak, strukture podataka su jednostavne, ne bi trebalo da imaš problema sa tim, ako znaš i C i Delphi.
[ savkic @ 28.06.2010. 15:22 ] @
> Vec sam je prcitao ali mi nije pomoglo :(
Zašto, samo treba da prevedeš iz Ca u Delphi. Za konverziju pogledaj http://rvelthuis.de/programs/convertpack.html, a ima i drugih alata koji to mogu manje ili više uraditi. [ sokomm @ 28.06.2010. 17:28 ] @
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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|