Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#10

Re: String aus Anwendung in Dll übergeben und zurück

  Alt 30. Jan 2005, 01: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 = '0do
    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 = '0do
    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.0else T := '';
  if T = '-.then if (VKTL = True) or (HKTL = True) then T := '0.0else 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!"
  Mit Zitat antworten Zitat