AnsiString - Windows -> Linux



  • Hallo

    ich habe ein programm geschrieben das unter windows mit AnsiStrings funktioniert, was muss ich bei linux für eine bibliothek einbinden??
    und wie sieht der befehl dafür aus??

    danke



  • AnsiString? Ist das nicht irgend so eine VCL Sache? Probier doch Kylix aus.

    Glaub kaum, dass es eine Library unter Linux gibt, die API kompatibel dazu ist. Und wenn kann man mit der -l Anweisung linken (Mehr Infos im GCC Handbuch 🙄 )

    Ansonsten nimm doch einfach std::string anstelle AnsiString, dass ist dann auch gleich portabler 🙄



  • und wenn du mir auch noch sagst wie das geht?? *gg*

    AnsiString Alles, Text1, Text2, Fertig, Temp;
    

    das einfach erstetzen durch das:

    std::string Alles, Text1, Text2, Fertig, Temp;
    

    ??

    oder is das schon ein bisschen schwieriger?? *gg*

    danke, mfg Saroll



  • Ich denke, dass das ein bisschen schwieriger wird, da die APIs sicher nicht kompatibel sind

    Hier ist eine Beschreibung der std::string-API, kannst die ja mal mit der AnsiString API vergleichen
    http://www.sgi.com/tech/stl/basic_string.html



  • Ich hab für die Firma vor ein paar Monaten einen Wrapper geschrieben, der einfach für die Implementation der AnsiString Funktionen die std::string-Funktionalität hergenommen hat.

    Hat mich eh nur ein paar Stunden gekostet + immer wieder mal ein bisschen was, wenn wir eine neue Funktion gebraucht haben, die ich noch nicht gemacht hatte.



  • dann kannst du mir ja vielleicht ein bisschen helfen *gg*

    AnsiString Alles, Text1, Text2, Fertig, Temp;
    int wo=1,laenge, restore=0, i=1;
    double koordx,koordy;
    bool zeichen, ende=false;
    Alles=getchar();
    
    do
    {
    
     wo=Alles.Pos('\x1B');
     Text1=Alles.Delete(wo,1);
     wo=Alles.Pos('\x1B');
     if(wo==0)
       {wo=Alles.Length()+2;
        ende=true;
       }
     Text1=Alles.SubString(1,wo-1);
     Alles=Alles.Delete(1,wo-1);
     Temp=Text1;
    
     if(Temp=='E')
       {wo=Alles.AnsiPos('\x1B');
        Text1=Alles.Delete(wo,1);
        wo=Alles.AnsiPos('\x1B');
        Text1=Alles.SubString(1,wo-1);
        Alles=Alles.Delete(1,wo-1);
        Temp=Temp+Text1;
       }
     Text1=Temp;
     if(Temp[1]=='E'&&Temp[2]=='%'&&Temp[3]=='-'&&Temp[4]=='1')
       {Fertig=Fertig+"%! ";
        Text1=' ';
       }
     if(Temp[1]=='&'&&Temp[2]=='l'&&Temp[3]=='1'&&Temp[4]=='O')
       {Fertig=Fertig+"90 rotate 1000 800 translate ";
        Text1=' ';
       }
     if(Temp[1]=='&'&&Temp[2]=='l'&&Temp[3]=='0'&&Temp[4]=='O')
       {Fertig=Fertig+"800 1000 translate ";
        Text1=' ';
       }
     if(Temp=="\22")
       {Fertig=Fertig+"-10 0 rmoveto ";
        Text1=' ';
       }
     if(Temp[1]=='('&&Temp[2]=='1'&&Temp[3]=='9'&&Temp[4]=='U')
       {Fertig=Fertig+"/Times-Italic findfont setfont ";
        Text1=' ';
        if(Text1!="")
         {zeichen=true;
         }
       }
     if(Temp[1]=='('&&Temp[2]=='s'&&Temp[3]=='0'&&Temp[4]=='B')
      {Fertig=Fertig+"/Times-Roman findfont setfont ";
       Text1=Text1.Delete(1,4);
       if(Text1!="")
         {zeichen=true;
         }
      }
     if(Temp[1]=='('&&Temp[2]=='s'&&Temp[3]=='3'&&Temp[4]=='B')
       {Fertig=Fertig+"/Times-Bold findfont setfont ";
        Text1=Text1.Delete(1,4);
        if(Text1!="")
         {zeichen=true;
         }
       }
     if(Temp=="(s1P")
       {Fertig=Fertig+koordx+' '+koordy;
        Fertig=Fertig+" moveto ";
        Text1=' ';
       }
     if(Temp=="(s16602T")
       {Text1=' ';
       }
     if(Temp[1]=='('&&Temp[2]=='s')
       {laenge=Temp.Length();
        Text2=Text1.SubString(laenge,1);
        Text1=Text1.Delete(laenge,1);
        if(Text2=='V')
          {Text1=Text1.Delete(1,2);
           Fertig=Fertig+"gsave "+Text1+" scalefont setfont ";
           restore=1;
         }
       }
     if(Text1[1]=='*'&&Text1[2]=='p')
       {laenge=Temp.Length();
        Text1=Text1.Delete(1,2);
        laenge=Text1.Length();
        Text2=Text1.SubString(laenge,1);
        Text1=Text1.Delete(laenge,1);
        if(Text2=='X')
          {
             koordx=Text1.ToDouble();
             koordx=(koordx/11,77)*(-1);
    
          }
        if(Text2=='Y')
          {
             koordy=Text1.ToDouble();
             koordy=(koordy/11,77)*(-1);
    
          }
        Text1=' ';
       }
     if(zeichen==true)
       {zeichen=false;
        Fertig=Fertig+"('"+Text1+"') show ";
        if(restore==1)
          {Fertig=Fertig+"grestore ";
           restore=0;
          }
       }
     laenge=Alles.Length();
    }while(ende==false);
    

    das is der code den ich hab, aber der geht halt nur unter windows mit der VCL, kann ich da die CLX verwenden?? wenn ja, wie??

    wenn du den code änderst lass dir zeit *gg*

    danke im voraus!!
    mfg Saroll



  • @kingruedi, Kylix ist aber Delphi. Dann müsste er ja seinen ganzen Code von C/C++ nach Delphi portieren. Die Bibliothek ist ja von mir aus gleich aber die Sprache nicht. Korrigiere mich wenn ich mich irre 🙂



  • Du irrst dich. Mit Kylix3 gibt es seit knapp zwei (?) Jahren auch eine C++-Variante.

    Saroll:
    Den Code kannst du, so wie er da steht, auch in einer CLX-Anwendung einsetzen.
    Aber denk dran, dass Fragen zur CLX etc. eigentlich in's BCB-Forum gehören, die CLX läuft schliesslich nicht nur unter Linux.


Anmelden zum Antworten