Das.
function se_getCertificationId(certificationId: PPByte; certificationIdLength: PUInt32): se_result_t ; cdecl; external 'se-api-c.dll';
kann nur ins leere laufen denn ByRef ist immer
var in Delphi ByVal ist einfach ein Parameter der übergeben wird.
Und dann was denn nun?
PCertificationID: PAnsiChar;
oder
CertificationId: string
beides geht auf keinen Fall wenn schon dann
PCertificationID: PAnsiChar;
entfernen und Rückgabe ist
CertificationId: string
Wenn CertificationId ein Pointer auf AnsiString ist (siehe PtrToStringAnsiAndFree) dann bitte
CertificationID: PAnsiChar
und nicht
CertificationID: string
.
Alles durcheinander geworfen sorry.
Siehe
function SeGetCertificationId(var CertificationId: string): TSeReturnCode;
und
function SeGetCertificationId(var CertificationId: PAnsiChar): TSeReturnCode;
Die Definition
PCertificationID: PAnsiChar;
ist dann unsinnig.
Korrekt wäre das ohne Gewähr.
Delphi-Quellcode:
function SeGetCertificationId(
var CertificationId: PAnsiChar): TSeReturnCode;
var
// PCertificationID: PAnsiChar; // Quatsch
// PCurrent: PAnsiChar; wird nicht verwendet
CertificationIDLength: Cardinal;
// i: Cardinal; wird nicht verwendet
begin
// PCertificationID := nil; Quatsch
// VB übergibt PCertificationID = &H000000000 und CertificationIDLength = 0
Result := TSeReturnCode(se_getCertificationID(CertificationID, CertificationIDLength));
// Zurück bekomme ich im VB Code BSI-K-TR-0000-2019 für PCertificationID und 18 für CertificationIDLength
// Mit Delphi und der Zeile oben einen Fehlercode
// Da werde ich die Parameter entsprechend übernehme sobalt
// mir se_getCertificationID was brauchbares liefert.
// Aktuell erhalte ich hier Access Violation oder der Result code sagt
// etwas von 'missing parameter'
end;
Nochmal
var certificationId: PAnsiChar
oder
var certificationId: string
entscheide dich einfach mal.
function se_getCertificationId(var certificationId: PAnsiChar; certificationIdLength: Cardinal): Cardinal; cdecl; external 'se-api-c.dll';