J'essaie d'utiliser une API sous Delphi. Voici la documentation de l'APIComment appeler API avec PUCHAR?
OKERR ENTRY SCardCLMifareStdAuthent
(IN SCARDHANDLE ulHandleCard,IN ULONG ulMifareBlockNr,
IN UCHAR ucMifareAuthMode,IN UCHAR ucMifareAccessType,IN UCHAR ucMifareKeyNr,
IN PUCHAR pucMifareKey,IN ULONG ulMifareKeyLen);
Alors pucMifareKey: A pointer to the six byte Mifare key
. Le code que j'ai essayé jusqu'ici;
function Auth():Integer;
type
TSCardCLMifareStdAuthent = function(SCARDHANDLE: cardinal; ulMifareBlockNr: ULONG;
ucMifareAuthMode, ucMifareAccessType, ucMifareKeyNr: byte; pucMifareKey: puchar;
ulMifareKeyLen: cardinal):LONG;
var
SCardCLMifareStdAuthent: TSCardCLMifareStdAuthent;
hDLL: Integer;
CardHandle: cardinal;
i: integer;
Key: array of UCHAR;
begin
Result:=1;
//CardHandle is defined here
SetLength(Key, 6);
for i := low(key) to high(key) do
Key[i] := $FF;
hDLL := LoadLibrary('scardsyn.dll');
@SCardCLMifareStdAuthent := GetProcAddress(hDLL, 'SCardCLMifareStdAuthent');
if @SCardCLMifareStdAuthent <> nil then
Result:=SCardCLMifareStdAuthent(CardHandle, $00, 96, 0, 0, ^Key, 6);
FreeLibrary(hDLL);
end;
L'erreur que je reçois est Incompatible types: 'Byte' and 'Char'
à la ligne de Result:=SCardCL....
due^pointeur clé. Des idées?
Vous ne créez pas de pointeur dans le code avec le caractère "^". C'est pour DE-référencement quelque chose qui est déjà un pointeur, puis il apparaît sur la droite d'un identifiant. Quand il apparaît sur la gauche, il doit précéder un nom TYPE, et qui doit apparaître dans un type ou une variable DECLARATION, comment dans une instruction exécutable. –