(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: String aus Anwendung in Dll übergeben und zurück
30. Jan 2005, 02:18
Delphi-Quellcode:
procedure EditKommaAusgang(Zeichen:PChar; var Ergebnis: PChar); stdcall;
var
T, VKT, HKT, B: String;
MP, KP: Integer;
VKTL, HKTL: Boolean;
begin
VKTL := False;
HKTL := False;
T := Zeichen;
if T = '.' then T := '0.0';
if T = '-' then T := '0.0';
if T = '-.' then T := '0.0';
if Pos('.', T) = 0 then T := T + '.';
MP := Pos('-', T);
KP := Pos('.', T);
if KP > 0 then
begin
VKT := Copy(T, 1, KP - 1);
if MP > 0 then VKT := Copy(VKT, 2, Length(VKT) - 1);
HKT := Copy(T, KP + 1, Length(T) - KP);
//Vorkommatext Nullen kürzen
B := Copy(VKT, 1, 1);
while B = '0' do
begin
VKT := Copy(VKT, 2, Length(VKT) - 1);
B := Copy(VKT, 1, 1);
if Length(VKT) = 0 then VKTL := True;
end;
//Hinterkommatext Nullen kürzen
B := Copy(HKT, Length(HKT), 1);
while B = '0' do
begin
HKT := Copy(HKT, 1, Length(HKT) - 1);
B := Copy(HKT, Length(HKT), 1);
if Length(HKT) = 0 then HKTL := True;
end;
T := '';
if MP > 0 then T := '-';
T := T + VKT + '.' + HKT;
end;
if T = '.' then if (VKTL = True) or (HKTL = True) then T := '0.0' else T := '';
if T = '-.' then if (VKTL = True) or (HKTL = True) then T := '0.0' else T := '';
Ergebnis := StrAlloc(length(T) + 1);
move(T[1], Ergebnis^, length(T));
Ergebnis[length(T)] := #0;
end;
procedure FreeDLLMem(AChars: PChar);
begin
StrDispose(AChars);
end;
procedure TForm1.Vorschau();
var V510: PChar;
begin
EditKommaAusgang('00123.6329000', V510);
ShowMessage(V510);
FreeDLLMem(V510);
end;
Jens Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
|
|
Zitat
|