![]() |
externes DLL bei Delphi XE
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:
In dem Beispiel läuft er immer nur noch auf 'ERR_BLZ_KTONR_NOCHECK'.
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; 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 |
AW: externes DLL bei Delphi XE
Und wenn Du jetzt noch die Strings in AnsiStrings änderst, geht es dann?
|
AW: externes DLL bei Delphi XE
Schau dir doch mal die Compilerwarnungen an. Diese sollten dich darauf hinweisen was falsch ist.
|
AW: externes DLL bei Delphi XE
Zitat:
Zitat:
die werden doch bei der Übergabe and das DDL in PAnsiChar gewandelt. macht das "vorher" einen Unterschied? 0 Warnungen 0 Fehler... |
AW: externes DLL bei Delphi XE
Was ich meinte:
Delphi-Quellcode:
Ich habe mein XE noch nicht lange genug, um genau sagen zu können, was bei einem Cast von Unicodestring -> PAnsiChar genau passiert, daher würde ich es einmal auf diesem Wege probieren.
function CheckKontoNr(sKto, sBLZnr :AnsiString): Integer;
var sKtoNr, sBlz, sPz, sName: AnsiString; |
AW: externes DLL bei Delphi XE
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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-2025 by Thomas Breitkreuz