Ergebnis 1 bis 9 von 9
  1. #1
    Anfänger
    Registriert seit
    21.11.2008
    Beiträge
    14

    Standard [S] Builder coden ohne ExeMod

    Ich suche eine Möglichkeit, einen Builder ohne ExeMod zu coden. Gibts da was? Oder muss ich mir da was eigenes einfallen lassen?

    MfG Z4ppy
    Geändert von Z4ppy (05.03.2009 um 20:07 Uhr)

  2. #2
    SceneCoderz Manager Avatar von Volumen
    Registriert seit
    21.01.2008
    Beiträge
    576

    Standard

    Wieso willst du denn nicht exemod benutzen? Ist doch gut.


    [B]
    1,76 Meter hohes, brünettes, launisches, gut aussehendes, liebes, unverständnissvolles, nicht männlich sprechendes, intelligentes, junges etwas.
    [S]
    Blondes/Brünettes , gut aussehendes, stilles, dummes, notgeiles, älteres weibliches mit knackigem Hintern

  3. #3
    Anfänger
    Registriert seit
    21.11.2008
    Beiträge
    14

    Standard

    Ich hab schon meine Gründe dafür
    Also, weiss jemand eine Alternative?

    MfG Z4ppy

  4. #4
    is a Grammar Nazi Avatar von Hamtaro
    Registriert seit
    05.06.2007
    Beiträge
    431

    Standard

    einfach selber die Datei binär einlesen und dann deine Strings anhängen?
    Wenn du das nicht willst:
    Code:
    unit uBuilder;
    {
    ~  Anhängen von Strings an Dateien leicht gemacht  ~
    ~uBuilder Unit von Hamtaro - Kontakt ICQ: 383065218~
    ~Release Datum: 21.01.2008 - Going Down, Down, Down~
    }
    interface
    uses sysutils, classes;
    
    function AppendInfo     (Exename, Name, Info : String) : Boolean;
    function AppendOrReplace(Exename, Name, Info : String) : Boolean;
    function ReadInfo       (Exename, Name : String)       : String;
    function DeleteAllInfo  (Exename : String)             :Boolean;
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    var Delimiter1      : String = '<in';
        Delimiter2      : String = 'f¤>';
        InnerDelimiter : String = '¦';
    
    type TStringArray = Array of String;
    type TByteArray   = Array of Byte;
    implementation
    //Die Explode funktion hab ich da her: http://www.delphipraxis.net/topic3816_ein+dynamisches+array+aus+einem+string+erzeugen.html
    function Explode(const Separator, S: string; Limit: Integer = 0): TStringArray;
    var
      SepLen: Integer;
      F, P: PChar;
      ALen, Index: Integer;
    begin
      SetLength(Result, 0);
      if (S = '') or (Limit < 0) then Exit;
      if Separator = '' then
      begin
        SetLength(Result, 1);
        Result[0] := S;
        Exit;
      end;
      SepLen := Length(Separator);
      ALen := Limit;
      SetLength(Result, ALen);
    
      Index := 0;
      P := PChar(S);
      while P^ <> #0 do
      begin
        F := P;
        P := AnsiStrPos(P, PChar(Separator));
        if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
        if Index >= ALen then
        begin
          Inc(ALen, 5);
          SetLength(Result, ALen);
        end;
        SetString(Result[Index], F, P - F);
        Inc(Index);
        if P^ <> #0 then Inc(P, SepLen);
      end;
      if Index < ALen then SetLength(Result, Index);
    end;
    
    function ReadWholeFile(exename : String) : String;
    var
    Datei : TFileStream;
    begin
    Datei := TFilestream.Create(Exename, fmShareDenyNone or fmOpenRead);
    Datei.Seek(0,soFromBeginning);
    SetLength(Result,Datei.Size);
    Datei.Read(Result[1], Datei.Size);
    Datei.Free;
    end;
    
    
    function ReadAllInfo(Exename : string) : String;
    begin
    Result := Copy(ReadWholeFile(Exename),Pos(Delimiter1 + Delimiter2,ReadWholeFile(Exename)),Length(ReadWholeFile(Exename)));
    end;
    
    
    function AppendInfo(Exename, Name, Info : String) : Boolean;
    var
    Datei : TFilestream;
    infoString : String;
    begin
    Result := False;
    If ReadInfo(Exename, Name) <> '' Then Exit;  //wir wollen keine doppelten
    Result := True;
    try
    InfoString  := Delimiter1 + Delimiter2 + Name + InnerDelimiter + Info;
    Datei := TFilestream.Create(Exename, fmOpenReadWrite or fmShareDenyWrite);
    Datei.Seek(0, soFromEnd);
    Datei.Write(Pointer(InfoString)^, Length(InfoString));
    except
    Result := False;
    end;
    Datei.Free;
    end;
    
    
    function AppendOrReplace(Exename, Name, Info : String) : Boolean;
    var
    Datei : TFilestream;
    alleInfos : String;
    neueInfos : String;
    begin
    result := True;
    try
    If ReadInfo(Exename,Name) = '' Then begin
      AppendInfo(Exename,Name,Info);
      Exit;
    end;
    AlleInfos := ReadAllInfo(Exename);
    neueInfos := StringReplace(AlleInfos, '<inf¤>' + Name + '¦' + ReadInfo(Exename,Name),'<inf¤>' + Name + '¦' + Info, []);
    DeleteAllInfo(Exename);
    Datei := TFilestream.Create(Exename,fmOpenWrite Or fmShareDenyNone);
    Datei.Seek(0,soFromEnd);
    Datei.Write(Pointer(neueInfos)^,Length(neueInfos));
    Datei.Free;
    except
    Result := false;
    end;
    end;
    
    
    function DeleteAllInfo(Exename : String) : Boolean;
    var
    Datei : TFileStream;
    ganzeDatei : String;
    ohneInfos : String;
    begin
    Result := True;
    try
    ganzeDatei := ReadWholeFile(Exename);
    ohneInfos := Copy(ReadWholeFIle(Exename),0,Pos(Delimiter1 + Delimiter2,ganzeDatei) - 1);
    DeleteFile(Exename);
    Datei := TFileStream.Create(Exename,fmCreate Or fmShareExclusive  Or fmOpenWrite);
    Datei.Write(Pointer(ohneInfos)^,Length(ohneInfos));
    Datei.Free;
    except
    Result := False;
    end;
    end;
    
    
    function ReadInfo  (Exename, Name : String) : String;
    var
    alleinfos : String;
    aInfos : TStringArray;
    i : Integer;
    begin
    alleInfos := ReadAllInfo(Exename);
    aInfos := Explode(Delimiter1 + Delimiter2, alleInfos);
    For i := 0 To High(aInfos) do begin
      If Copy(aInfos[i],0, Pos(Innerdelimiter,aInfos[i]) -1)= name Then
      begin Result := Copy(aInfos[i],Pos(Innerdelimiter,aInfos[i]) + 1, Length(aInfos[i]));
      exit;
      end;
    end;
    end;
    
    end.
    Hat aber den Nachteil, dass die classes unit genutzt wird, unter 300kb wirst du deine exe kaum bekommen
    Sunshine, hurricane
    All the highs & lows

  5. #5
    Anfänger
    Registriert seit
    21.11.2008
    Beiträge
    14

    Standard

    Geht es auch kleiner? Weil ich muss die Unit dann wohl auch im Server einbinden, um die Infos wieder auszulesen... Ein 300+ kB Server war eigentlich nicht mein Ziel ^^

    MfG Z4ppy

  6. #6
    Sobig Wurm
    Registriert seit
    19.06.2007
    Beiträge
    215

    Standard

    schreib dir die entsprechenden Prozeduren und Funktionen aus der Exemod raus, dann haste nicht allen unnötigen Ballast (wenn das dein Problem ist ^^)

  7. #7
    is a Grammar Nazi Avatar von Hamtaro
    Registriert seit
    05.06.2007
    Beiträge
    431

    Standard

    Exemod verwendet soweit ich weiß auch die classes unit.
    Wenn du es wirklich klein haben willst, benutz die CreateFile/WriteFile/ReadFile APIs
    Näheres dazu steht in der MSDN
    Sunshine, hurricane
    All the highs & lows

  8. #8
    CIH-Virus Avatar von Steiger_mp
    Registriert seit
    18.08.2007
    Beiträge
    485

    Standard

    ich hatte es kleiner hinbekommen (ohne classes),ich schau nachher mal nach und editier
    Gerne würde ich dumme Antworten anderer User zitieren um mein Ego zu steigern. Nur leider passt das halbe Forum nicht in meine Signatur.

  9. #9
    Anfänger
    Registriert seit
    21.11.2008
    Beiträge
    14

    Standard

    Habs inzwischen hingekriegt. Im Builder lös ich es mit einem FileStream (also mit Classes), in der gebildeten EXE selbst les ich die Datei per AssignFile & Co. ein (bei nichtdarstellbaren Zeichen ersetz ich durch ein Leerzeichen) und durchsuch dann mit Pos nach dem String ^^

    MfG Z4ppy

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •