Migration of code from Pascal to C++

khaliloenit Messages postés 38 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'essaie de développer une dll pour mon application et ce qui est bien est que j'ai le code développé en Pascal sur Borland Delphi 6, mais le problème est qu'il existe certains objets que je ne peux pas définir en c + +. : (

Donc j'ai besoin d'aide pour cette migration, et si il y a quelqu'un peut m'aider quelle est la meilleure solution et les objets en c + + pour les objets proches de Pascal:

TStringList
TMemoryStream
TStringStream
THandleStream
Configuration: Windows XP
Firefox 3.0.11

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Pour faire une liste de chaîne il suffit d'utiliser la STL : std::list<std::string>
    https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
    https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583

    Pour le memory stream le plus simple c'est d'allouer un bloc mémoire (par exemple avec un malloc) et d'écrire dedans avec la fonction write :
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/write.2.html

    Pour manipuler un flux sur une chaîne utilise un std::istringstream ou un std::ostringstream.

    Pour manipuler un handle, cf la doc microsoft.

    Bonne chance
    0
    1. khaliloenit Messages postés 38 Statut Membre
       
      Merci mamiemando de me répondre, tres gentille de ta part .Alors je viens de trouver quelques choses que je vais s'assurer qu'elles aboutissent à une chose :

      TStringList : je vais essayer avec ce qui vous avez dis
      TMemoryStream : j'ai trouvé quelques chose comme ca ( TMemoryStream ^ ms = gcnew TMemoryStream; ) il parait qu'elle marche
      TStringStream : j'ai trouvé stringstream object ?
      THandleStream : pas de résultat

      Avez vous une idée sur celles ci ?

      Merci de ta compréhension
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    TStringList : je vais essayer avec ce qui vous avez dis

    Voici un exemple :
    #include <list>
    #include <string>
    #include <iostream>
    
    int main(){
        // Préparer des chaînes
        std::string
            s1 = "plop",
            s2 = "pouet",
            s3 = "tapir";
    
        // Mettre les chaînes au bout d'une liste (initialement vide)
        std::list<std::string> l;
        l.push_back(s1);
        l.push_back(s2);
        l.push_back(s3);
    
        // Ecrire la liste
        std::list<std::string>::const_iterator
            lit (l.begin()),
            lend(l.end());
        for(;lit!=lend;++lit) std::cout << *lit << std::endl;
        return 0;
    }
    

    Ce qui donne à l'exécution :
    plop
    pouet
    tapir

    j'ai trouvé quelques chose comme ca ( TMemoryStream ^ ms = gcnew

    Ca c'est pas du C++ tu peux me croire.

    TMemoryStream; ) il parait qu'elle marche

    Pas compris.

    TStringStream : j'ai trouvé stringstream object ?

    Non c'est vraiment std::ostringstream (pour écrire dans un buffer) et std::istringstream (pour lire dans un buffer).
    #include <sstream>
    #include <iostream>
    
    int main(){
        std::ostringstream oss;
        oss << "plop" << 1.23 << ' ' << 69;
        std::cout << oss.str();
        return 0;
    }
    

    Ce qui donne à l'exécution :
    plop1.23 69

    THandleStream : pas de résultat

    C'est normal la notion de handle n'existe pas spécialement sous linux et sous windows il y a sans doute des fonctions spécifiques. La vraie question c'est que veux-tu faire avec des handle.

    Bonne chance
    0
    1. khaliloenit Messages postés 38 Statut Membre
       
      - Pour TMemoryStream ^ ms = gcnew TMemoryStream :
      le compilateur l'a accepter en modifiant une option dans les propriétés du projet et je peux travailler avec elle . Alors je peux s'assurer d'elle ou non à ton avis ?

      - Pour Handle j'ai un fichier que je veux l'ouvrir -> stocker son contenu dans ce Handle stream ensuite faire le traitement necessaire pour enfin stocker le contenu de ce Handle stream dans l'object MemoryStream .


      Merci pour ta compréhension et ton aide
      0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    le compilateur l'a accepter en modifiant une option dans les propriétés du projet et je peux travailler avec elle . Alors je peux s'assurer d'elle ou non à ton avis ?

    Mais tu programmes vraiment en C++ ? Car je n'ai jamais vu cette syntaxe ? Ou alors ce sont des macros et des fonctions spécifiques à ton code.

    - Pour Handle j'ai un fichier que je veux l'ouvrir -> stocker son contenu dans ce Handle stream ensuite faire le traitement necessaire pour enfin stocker le contenu de ce Handle stream dans l'object MemoryStream .

    En C++ pour manipuler un flux sur un fichier on utilise un std::ifstream ou un std::ofstream. Exemple :
    #include <fstream>
    #include <iostream>
    
    int main(){
      std::ofstream ofs("pouet.txt");
      if(!ofs){
        std::cerr << "can't write pouet.txt" << std::endl;
        return 1;
      }
      ofs << "plop" << 1.23;
      ofs.close();
      return 0;
    }

    Bonne chance
    0
    1. khaliloenit Messages postés 38 Statut Membre
       
      Merci pour toi mamiemando , vraiment merci pour ton aide.
      Prière d'accepter mes meilleurs salutations et de me permet de poser des autres questions en cas de blocage. :)
      0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bien entendu, n'hésite pas ;-)
    0
    1. khaliloenit Messages postés 38 Statut Membre
       
      Bonsoir mamiemando,

      S'il vous plaît avez vous une idée sur ce que veut dire

      array of array[0..1] of integer

      c'est en pascal (Delphi plus précisément)?
      Aussi son analogue en c++ ?

      Merci pour l'aide.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Aucune idée je ne fais pas de Pascal, mais j'imagine que c'est une un tableau de couple entiers dans {0,1}. Son équivalent en C++ serait un :
    std::vector<std::pair<bool,bool> >

    Exemple :
    #include <vector>
    #include <iostream>
    
    typedef std::vector<std::pair<bool,bool> > my_array_t;
    
    // Ecrire une paire
    template <typename T1,typename T2>
    std::ostream & operator << (std::ostream & out,const std::pair<T1,T2> & p){
        out << '(' << p.first << ',' << p.second << ')';
        return out;
    }
    
    // Ecrire un vecteur
    template <typename T>
    std::ostream & operator << (std::ostream & out,const std::vector<T> & v){
        typename std::vector<T>::const_iterator
            vit (v.begin()),
            vend(v.end());
        out << '[';
        for(;vit!=vend;++vit) out << ' ' << *vit;
        out << " ]";
        return out;
    }
    
    int main(){
        my_array_t my_array;
    
        // Remplir le tableau
        my_array.push_back(std::make_pair(0,1));
        my_array.push_back(std::make_pair(1,1));
        my_array.push_back(std::make_pair(1,0));
        my_array.push_back(std::make_pair(0,0));
        my_array.push_back(std::make_pair(1,0));
    
        // Et l'afficher
        std::cout << my_array << std::endl;
    
        // Afficher le 2e élement (ils sont indexés à partir de 0)
        std::cout << my_array[1] << std::endl;
        return 0;
    }
    

    ... ce qui donne à l'exécution :
    [ (0,1) (1,1) (1,0) (0,0) (1,0) ]
    (1,1)
    

    Bonne chance
    0