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 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 - 6 sept. 2009 à 13:42
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 - 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
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:
- Migration of code from Pascal to C++
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Code asci - Guide
- Code puk bloqué - Guide
- Qwerty to azerty - Guide
5 réponses
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
7 juil. 2009 à 19:43
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
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
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
8 juil. 2009 à 00:31
8 juil. 2009 à 00:31
TStringList : je vais essayer avec ce qui vous avez dis
Voici un exemple :
Ce qui donne à l'exécution :
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).
Ce qui donne à l'exécution :
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
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
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
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
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
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
8 juil. 2009 à 10:50
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 :
Bonne chance
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
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
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. :)
Prière d'accepter mes meilleurs salutations et de me permet de poser des autres questions en cas de blocage. :)
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
9 juil. 2009 à 01:30
9 juil. 2009 à 01:30
Bien entendu, n'hésite pas ;-)
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
6 sept. 2009 à 13:42
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 :
Exemple :
... ce qui donne à l'exécution :
Bonne chance
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
7 juil. 2009 à 21:04
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