Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi IBANKernel.dll Unicode PChar Umwandlung (https://www.delphipraxis.net/183609-ibankernel-dll-unicode-pchar-umwandlung.html)

gullatrulla 22. Jan 2015 13:53

IBANKernel.dll Unicode PChar Umwandlung
 
Hi Delphi Folks

Im Moment quäle ich mich mit einer "alten" Delphi 2007-Routine, welche in
Unicode übersetzt werden sollte. Es geht um die Umrechnung einer Konto-Nr in
ein Banken IBAN-Format.

Im Moment sehe ich vor lauter PChar, PAnsiChar, PWideChar den Wald vor lauter Bäumen
nicht mehr.

Ich habe schon versucht alle PChar in PWideChar zu übersetzen. Doch leider funktioniert
die Routine immer noch nicht.

Um einen Geistesblitz wäre ich Euch sehr dankbar.

Evtl. hat jemand diese Routine in Delphi 2009 oder grösser schon im Einsatz und
würde mich dankbarerweise erleuchten :-)

Herzlichen Dank zum voraus
Roland



{------------------------------------------------------------------------------------------}
function CreateIBAN(CClear,KKonto: String): String;
type
TIBANProc = function(pszKonto: PChar;
pszBCPC: PChar;
pszIBAN: PChar;
nIBANLen: Integer;
pszBC: PChar;
nBCLen: Integer;
pszPC: PChar;
nPCLen: Integer;
pszBIC: PChar;
nBICLen: Integer): Integer; cdecl;

var
HandleDLL: Cardinal;
ErgebnisDll: integer;
FarProc: TIBANProc;
pszKonto,pszBCPC,pszIBAN,pszBC,pszPC,pszBIC: PChar;
nIBANLen,nBCLen,nPCLen,nBICLen: integer;
begin
Result := '';

HandleDLL := LoadLibrary('IBANKernel.dll');

try
nIBANLen := 21;
nBCLen := 10;
nPCLen := 10;
nBICLen := 10;
{-------------------------------------------}
pszIBAN := nil;
pszIBAN := StrAlloc(64);

pszBC := nil;
pszBC := StrAlloc(32);

pszPC := pChar('100');
pszPC := StrAlloc(32);

pszBIC := nil;
pszBIC := StrAlloc(32);
{-------------------------------------------}
pszBCPC := pChar(CClear);
pszKonto := pChar(KKonto);
{-------------------------------------------}
ErgebnisDll := 0;
@FarProc := GetProcAddress(HandleDLL, 'IT_IBANConvert');

if Assigned(@FarProc) then begin
ErgebnisDll := FarProc(pszKonto,pszBCPC,pszIBAN,nIBANLen,pszBC,nB CLen,pszPC,nPCLen,pszBIC,nBICLen);
Result := pszIBAN;
end;

Case ErgebnisDll of
10..31: Result := 'Fehler - [E]Code=' + IntToStr(ErgebnisDll);
end;

except
showmessage('Funktion der DLL konnte nicht ausgeführt werden.');
end;

FreeLibrary(HandleDLL);
end;
{------------------------------------------------------------------------------------------}

DeddyH 22. Jan 2015 14:06

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Wenn die Routine so unter Delphi 2007 funktioniert hat, solltest Du mal testhalber alle PChar als PAnsiChar deklarieren.

mkinzler 22. Jan 2015 14:08

AW: IBANKernel.dll Unicode PChar Umwandlung
 
PChar ist ab D2009 ein PWideChar.

Was erwartet die Dll? Wenn Ansi, dann musst du statt PChar PAnsiChar verwenden.

DeddyH 22. Jan 2015 14:16

AW: IBANKernel.dll Unicode PChar Umwandlung
 
[OT] Anis? Netter Typo :) [/OT]
Die Parameter sollten übrigens dann auch AnsiStrings sein.

mkinzler 22. Jan 2015 14:26

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Nein, nur nach Genuss eines Ousos oder Rakis :lol:

gullatrulla 22. Jan 2015 14:46

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Hi Delphi-Folks

PChar --> PAnsiChar brachte keine Besserung...


Funktion IT_IBANConvert laut Handbuch Hersteller...

int IT_IBANConvert(char *pszKonto,// [in] mandatory
char *pszBCPC, // [in] mandatory
char *pszIBAN, // [in/out] mandatory
int nIBANLen, // [in] mandatory
char *pszBC, // [in/out] optional
int nBCLen, // [in] optional
char *pszPC, // [in/out] optional
int nPCLen, // [in] optional
char *pszRESERVED, // [in/out] optional
int nRESERVEDLen); // [in] optional

Doch auch hier werde ich nicht schlauer

Gruss
Roland

baumina 22. Jan 2015 14:52

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Du musst auch bei den casts PAnsiChar verwenden, hast du das gemacht?. z.B.

Delphi-Quellcode:
pszKonto := pAnsiChar(KKonto);

gullatrulla 22. Jan 2015 15:13

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Delphi-Folks

Ja, gemacht...
pszBCPC := PAnsiChar (CClear);
pszKonto := PAnsiChar (KKonto);

Funktioniert immer noch nicht.
Ich denke, dass es (wie immer) nur
an einer Kleinigkeit hängt.

Ich erlaube mir einmal das Program als
Zip-Datei anzuhängen.

Herzliche Grüsse
Roland

DeddyH 22. Jan 2015 15:44

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Und bei
Delphi-Quellcode:
function CreateIBAN(CClear,KKonto: AnsiString): String;
?

gullatrulla 23. Jan 2015 13:08

AW: IBANKernel.dll Unicode PChar Umwandlung
 
Hi Delphi-Folks

Na hallo... da habe ich wohl wirklich geträumt.
(oder eben im Wald verlaufen)

Ja, so funktioniert es natürlich.

Dank an alle...

Herzliche Grüsse
Roland


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz