AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit PAnsiChar und Rückgabewert einer Funktion CryptoSys PKI
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit PAnsiChar und Rückgabewert einer Funktion CryptoSys PKI

Ein Thema von Back2Code · begonnen am 7. Sep 2015 · letzter Beitrag vom 7. Sep 2015
 
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#1

Problem mit PAnsiChar und Rückgabewert einer Funktion CryptoSys PKI

  Alt 7. Sep 2015, 11:28
Guten Morgen DP'ler,

ich arbeite derzeit mit dem Interface von dem CryptoSys PKI (http://www.cryptosys.net/delphi.html)

Hier mal ein Auszug aus dem Interface

Delphi-Quellcode:
.
.
function CMS_ReadSigDataToString(szDataOut : PAnsiChar; nDataOutLen : Integer; szFileIn : AnsiString; nOptions : Integer) : Integer; stdcall; external 'diCrPKI.dll';
.
.
szDataOut ist der Parameter den ich als Rückgabewert erwarte / mit dem ich arbeiten muss da dieser den entschlüsselten String enthält.

Die Deklaration als normaler String fiel schonmal weg, dann hab ich es als strData: Array [0..40] of Ansichar; deklariert und bekomme auch die richtigen Rückgabewerte das Problem hierbei ist allerdings, dass damit die Länge des Rückgabewertes bereits vordefiniert ist und ich logischerweise ne dicke Exception bekomme, sobald der Output größer als 40 Chars ist.

Was kann ich machen um die Länge des Arrays passend zu dem Output zu definieren, dass nichts fehlt/abgeschnitten ist? Beim Versuch ein dynamisches Array zu nutzen bekam ich:

Code:
[dcc32 Fehler] uMain.pas(435): E2010 Inkompatible Typen: 'PAnsiChar' und 'Dynamic array'
Aufruf:
nRet := CMS_ReadSigDataToString(strData, nDataLen, strSigFile, 0); Codeauszug:

Delphi-Quellcode:
var
  strData: Array [0..40] of Ansichar;
  nDataLen: Integer;
begin
    // Read in the recipient's private key
    strPrivateKey := rsaReadPrivateKey(strPriKeyFile, strPassword);
    if Length(strPrivateKey) = 0
      then begin
        WriteDebugMessage('Schlüssel konnte nicht eingelesen werden.');
      end
      else begin
        WriteDebugMessage('Schlüssel erfolgreich gelesen' + #13#10 + 'Schlüssellänge in Bits: ' + IntToStr(RSA_KeyBits(strPrivateKey)));
      end;

    // Intermediate file we will create
    strSigFile := strInputFile + '.i2.tmp';

    // Read the encrypted data from the enveloped-data file
    nRet := CMS_ReadEnvData(strSigFile, strInputFile, '', strPrivateKey, 0); //
    WriteDebugMessage('CMS_ReadEnvData returns ' + IntToStr(nRet) + ' (expected 0)');
    if nRet <> 0
      then begin
        WriteDebugMessage('**ERROR** while reading the encrypted data from the enveloped-data file');
      end
      else
      begin
        WriteDebugMessage('Extracted signed-data file ' + strSigFile);
      end;

    //How long is the content to be read?
    nDataLen := CMS_ReadSigDataToString('', 0, strSigFile, 0);
    if nDataLen <= 0
    then begin
      WriteDebugMessage('Cannot read signed-data file');
    end
   else
   begin
     nRet := CMS_ReadSigDataToString(strData, nDataLen, strSigFile, 0);
      WriteDebugMessage('CMS_ReadSigDataToString returns ' + IntToStr(nRet));
      WriteDebugMessage('Data is [' + strData + ']');
      Result := strData;
   end;
00111100001100110010000001000100011001010110110001 1100000110100001101001
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz