Migration of code from Pascal to C++

Fermé
khaliloenit Messages postés 34 Date d'inscription samedi 6 octobre 2007 Statut Membre Dernière intervention 27 octobre 2009 - 7 juil. 2009 à 12:28
mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 - 6 sept. 2009 à 13:42
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
A voir également:

5 réponses

mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 7 799
7 juil. 2009 à 19:43
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
khaliloenit Messages postés 34 Date d'inscription samedi 6 octobre 2007 Statut Membre Dernière intervention 27 octobre 2009
7 juil. 2009 à 21:04
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
mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 7 799
8 juil. 2009 à 00:31
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
khaliloenit Messages postés 34 Date d'inscription samedi 6 octobre 2007 Statut Membre Dernière intervention 27 octobre 2009
8 juil. 2009 à 01:09
- 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
mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 7 799
8 juil. 2009 à 10:50
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
khaliloenit Messages postés 34 Date d'inscription samedi 6 octobre 2007 Statut Membre Dernière intervention 27 octobre 2009
8 juil. 2009 à 12:37
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
mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 7 799
9 juil. 2009 à 01:30
Bien entendu, n'hésite pas ;-)
0
khaliloenit Messages postés 34 Date d'inscription samedi 6 octobre 2007 Statut Membre Dernière intervention 27 octobre 2009
6 sept. 2009 à 02:57
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33325 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 octobre 2024 7 799
6 sept. 2009 à 13:42
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