Ich versuche, eine API unter Delphi zu verwenden. Hier ist die API-DokumentationWie API mit PUCHAR aufrufen?
OKERR ENTRY SCardCLMifareStdAuthent
(IN SCARDHANDLE ulHandleCard,IN ULONG ulMifareBlockNr,
IN UCHAR ucMifareAuthMode,IN UCHAR ucMifareAccessType,IN UCHAR ucMifareKeyNr,
IN PUCHAR pucMifareKey,IN ULONG ulMifareKeyLen);
Während pucMifareKey: A pointer to the six byte Mifare key
. Der Code, den ich bisher versucht habe;
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;
Der Fehler ich erhalte ist Incompatible types: 'Byte' and 'Char'
an der Linie von Result:=SCardCL....
aufgrund^Key-Zeiger. Irgendwelche Ideen?
Sie erstellen keinen Zeiger im Code mit dem Zeichen "^". Das ist für das DE-Verweisen auf etwas, das bereits ein Zeiger ist, und dann erscheint es auf der RECHTEN Seite eines Identifikators. Wenn es auf der linken Seite angezeigt wird, muss es einem TYPE-Namen vorangestellt werden und in einem Typ oder einer Variablen DECLARATION angezeigt werden, wie in einer ausführbaren Anweisung. –