Einzelnen Beitrag anzeigen

venice2

Registriert seit: 5. Dez 2019
Ort: Köln
969 Beiträge
 
Delphi 2010 Architect
 
#7

AW: DLL Schnitstelle

  Alt 11. Jul 2020, 10:46
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';

Geändert von venice2 (11. Jul 2020 um 11:22 Uhr)
  Mit Zitat antworten Zitat