Einzelnen Beitrag anzeigen

Supergrobie

Registriert seit: 22. Okt 2003
Ort: Aachen
28 Beiträge
 
Delphi XE7 Professional
 
#1

externes DLL bei Delphi XE

  Alt 4. Apr 2011, 16:46
Hallo!

Leider finde ich hierzu einfach keine Lösung.
Ich entwickle eine Datenbank Anwendung und nehme dazu ein DLL eines Fremdherstellers
zu Hilfe welches Bankleitzahlen und Kontonummern prüft.
Eigentlich wurde es für Basic entwickelt und lief bisher mit Delphi2006
einwandfrei.

Seit dem Umstieg auf XE macht es nur noch Mist. Übergebene Daten werden nur noch als
"unbekannt" zurückgegeben.

Ich denke es hängt mit der Unicode funktionalität zusammen. Leider kenne ich mich
mit PAnsiChar und PWideString usw. mal garnicht aus...

Bisher war die Konfiguration so:
Delphi-Quellcode:
unit _Dta;

interface

uses StrUtils, sysUtils;

{Initialisierung + Beenden}
  function sevDTA_Init(sInit: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  procedure sevDTA_Close(Handle: LongInt); stdcall; external 'sevDTA32.DLL';
  function sevDTA_BLZFileDate(sDatum: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';

  {DTA-Datei erstellen, Datensätze schreiben, schliessen}
  function sevDTA_CreateFile(sFilename: PAnsiChar; iOvrWriteExists: LongInt): LongInt; stdcall; external 'sevDTA32.DLL';
  procedure sevDTA_CloseFile(fHandle: LongInt); stdcall; external 'sevDTA32.DLL';
  function sevDTA_FileInit(fHandle: LongInt; sKz, sBlz, sKtoNr, sName: PAnsiChar; iEuro: LongInt): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_FileAddRec(fHandle: LongInt; sBlz1, sKtoNr1, sName1, sIntKdNr, sBlz2, sKtoNr2, sName2, sVerwendungAs, sBetrag: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_FileEnd(fHandle: LongInt): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_Kontrollsummen(SumDaten, SumBLZ, SumKtoNr, SumBetrag: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  procedure sevDTA_Print(hDC: LongInt; prnName, FontName, sName, sBLZ, sKtoNr, sDatum: PAnsiChar); stdcall; external 'sevDTA32.DLL';

  {BLZ Prüfroutinen}
  procedure sevDTA_BLZSetPath(sPath: PAnsiChar); stdcall; external 'sevDTA32.DLL';
  function sevDTA_BLZExists(sBlz: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_BLZGetInfo(sBlz, sName, sPz: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_CheckKontoNr(sBlz, sKontoNr, sPz: PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';
  function sevDTA_BLZGetInfoEx(sBlz, sName, sPlz, sOrt, sBIC : PAnsiChar): LongInt; stdcall; external 'sevDTA32.DLL';

  {Kreditkarten Prüfroutine}
  function sevDTA_CheckCreditCard(sCardType, sCardNr, sMsgText: PAnsiChar; lLenRet: LongInt): LongInt; stdcall; external 'sevDTA32.DLL';

  {Übergeordnete routine}
  function CheckKontoNr(sKto, sBLZnr :String): Integer;
  function GetBLZInfo(sBLZnr : String): String;
  function GetDTAErr(lResult : Integer):String;

const
  {Fehler-Konstanten}
  ERR_DTA_SUCCESS = 0;

  {Initilisierung}
  ERR_DTA_INIT_FAILURE = -1;
  ERR_DTA_INIT_OK = 0;

  {FileHandle}
  ERR_DTA_NO_FILEHANDLE = 1;
  ERR_DTA_BAD_FILEHANDLE = 2;

  {DTA}
  ERR_DTA_BAD_KZ = 100;
  ERR_DTA_BAD_BLZ = 101;
  ERR_DTA_BAD_BLZ_LEN = 102;
...


function CheckKontoNr(sKto, sBLZnr :String): Integer;
var
   sKtoNr, sBlz, sPz, sName: String;
begin
     {Kontonummer prüfen}
     sKtoNr := sKto;
     sBlz := sBLZNr;
     { Wichtig! Mit ausreichend Leerstellen füllen! }
     SetLength(sName, 28);
     SetLength(sPz, 3);

     if sevDTA_BLZExists(PAnsiChar(sBlz)) = ERR_BLZ_OK then
     begin
        if sevDTA_BLZGetInfo(PAnsiChar(sBlz), PAnsiChar(sName), PAnsiChar(sPz)) = ERR_BLZ_OK then
           Result := sevDTA_CheckKontoNr(PAnsiChar(sBlz), PAnsiChar(sKtoNr), PAnsiChar(sPz))
        else
           Result := ERR_BLZ_KTONR_NOCHECK;
     end
     else
        Result := ERR_BLZ_KTONR_NOCHECK;
end;
In dem Beispiel läuft er immer nur noch auf 'ERR_BLZ_KTONR_NOCHECK'.

Auch bei der Initialisierung der DLL mittels einer Seriennummer bekomme ich keine Fehler.
Kann es nicht an den PAnsiChar Variablen liegen?
hatte schon mal alles als PWideChar übergeben bringt aber nichts...

Für jegliche Hilfe bzw. Anregungen wäre ich dankbar!

Gruss
Stevie
Stefan
  Mit Zitat antworten Zitat