Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Problem mit PAnsiChar und Rückgabewert einer Funktion CryptoSys PKI

  Alt 7. Sep 2015, 13:23
Oder kurz und DRY
Delphi-Quellcode:
unit Unit1;

interface

uses
  SysUtils;

type
  CryptoSysException = class( Exception );

function ReadSigData( AFileName: AnsiString ): AnsiString;

implementation

{$DEFINE MAYBE_BETTER}
function CMS_ReadSigDataToString(
  szDataOut : PAnsiChar;
  nDataOutLen: Integer;
  szFileIn : {$IFDEF MAYBE_BETTER}PAnsiChar{$ELSE}AnsiString{$ENDIF};
  nOptions : Integer ): Integer; stdcall; external 'diCrPKI.dll';

function ReadSigData( AFileName: AnsiString ): AnsiString;
var
  szDataOut : PAnsiChar;
  nDataOutLen: Integer;
  szFileIn : {$IFDEF MAYBE_BETTER}PAnsiChar{$ELSE}AnsiString{$ENDIF};
  nOptions : Integer;
begin
  szDataOut := nil;
  nDataOutLen := 0;
  szFileIn := {$IFDEF MAYBE_BETTER}PAnsiChar( AFileName ){$ELSE}AFileName{$ENDIF};
  nOptions := 0;

  while True do
    begin
      nDataOutLen := CMS_ReadSigDataToString(
        szDataOut,
        nDataOutLen,
        szFileIn,
        nOptions );
      if nDataOutLen <= 0
      then
        raise CryptoSysException.Create( 'API call failed' ); // o.ä.

      SetLength( Result, nDataOutLen );
      if szDataOut <> nil
      then
        Break;
      szDataOut := PAnsiChar( Result );
    end;
end;

end.
Das mit dem AnsiString Parameter wundert mich doch schon sehr ... sicher, dass das kein PAnsiChar ist?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat