Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
Delphi 5 Professional
|
Re: String aus Anwendung in Dll übergeben und zurück
30. Jan 2005, 02:57
Zitat von Armageddon:
wobei es auch eine function sein kann und keine procedure.
Delphi-Quellcode:
function EditKommaAusgang(Zeichen: PChar): WideString; 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 := '';
Result := T;
end;
Delphi-Quellcode:
procedure TForm1.Vorschau;
var
V510: String;
begin
V510 := EditKommaAusgang('00123.6329000');
ShowMessage(V510);
end;
Zitat:
Das sollte in die Dll und bei bedarf dynamisch geladen werden
Warum dynamisch und nicht statisch?
Statisch:
function EditKommaAusgang(Zeichen: PChar): WideString; stdcall; external 'mtrcnc32.dll';
Dynamisch:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
EditKommaAusgang: function(Zeichen: PChar): WideString; stdcall;
LibMod: HMODULE;
V510: String;
begin
LibMod := LoadLibrary('mtrcnc32.dll');
if LibMod <> 0 then
begin
EditKommaAusgang := GetProcAddress(LibMod, 'EditKommaAusgang');
if Assigned(EditKommaAusgang) then
begin
V510 := EditKommaAusgang('00123.6329000');
ShowMessage(V510);
end;
FreeLibrary(LibMod);
end;
end;
Ciao, Sprint.
"I don't know what I am doing, but I am sure I am having fun!"
|
|
Zitat
|