Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
842 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  developper un petit exe pour windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

developper un petit exe pour windows

n°2237433
isanaud
Posté le 09-09-2014 à 18:46:57  profilanswer
 

Bonjour,
Je dois ecrire un petit programme facilement transportable pour windows qui calcul via un algo maison un mot de passe à partir d'un code.
Je suis habitué à ecrire du code en php et python.
J'ai ecrit un programme sous petit mais la gestion des bibliothèque et la génération d'un exe leger  via py2exe s’avère compliqué.
 
Que pourriez vous me conseiller qui ne serait pas une usine à gaz  ?

mood
Publicité
Posté le 09-09-2014 à 18:46:57  profilanswer
 

n°2237468
tpierron
Posté le 09-09-2014 à 20:17:51  profilanswer
 


Si tu veux un langage qui a le minimum de dépendance sous Windows, il n'y pas beaucoup de choix: C ou C++. Comme il n'y a pas grand chose d'installé en standard sous windows, quasiment tous les autres langages vont se trimbaler des runtimes assez mamouthesques.
 
Et ça exclu aussi Visual Studio, qui par défaut utilise le runtime C/C++ de visual studio (bon, normal tu me diras), sauf qu'il n'est pas installé en standard. Le déploiment n'est pas trivial si tu t'y connais pas et si tu choisi la voie de la facilité (vcredist.exe), tu verras que c'est aussi bloat que py2exe. Tu peux forcer VS à utiliser le runtime C/C++ de windows, mais bon courage pour configurer ça (utiliser le DDK au lieu du SDK, yay!).
 
Bref, le seul environnement qui fonctionne direct avec le minimum de dépendance, c'est : MinGW (Minimalist GNU for Windows: un port natif de gcc sous Windows). Les programmes générés par MinGW sont compatibles à partir de windows 2000.
 
Code::Blocks (un IDE dans la même veine que Visual Studio) inclu une version de MinGW dans son installeur.
 
Cela dit, il y a intérêt que ça en vaille la peine: si tu ne t'y connais pas en C/C++, il va y avoir du boulot (donc du temps) pour se familiariser avec ça.

n°2237541
isanaud
Posté le 10-09-2014 à 08:49:32  profilanswer
 

Merci pour tes conseils,
je suis donc parti a bloc avec Code::Blocks et minGW
Les deux fonctionnent sous linux (ubuntu pour moi) et windows :sol:  
Le C quand tu viens de python, c'est chaud, notamment pour le travail des chaînes de caractères.
Comment orienter son choix vers C ou C++ ? :??:

n°2237562
gilou
Modérateur
Modzilla
Posté le 10-09-2014 à 10:52:56  profilanswer
 

A priori, C++ est un meilleur choix de nos jours, sauf cas spéciaux, vu les bibliothèques standard fournies avec.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2237584
olivthill
Posté le 10-09-2014 à 12:37:50  profilanswer
 

Code::Blocks et minGW est un excellent choix.
 
Pour moi, personnellement, myself, le C est beaucoup plus facile que le C++.
Il y a juste quelques petites choses à comprendre :
 
- Une chaine de caractères doit se terminer par un zéro binaire. La longueur de la chaine n'est mémorisée nulle part, contrairement à ce qui se passe pour beaucoup d'autres langages. La longueur en C, est le nombre d'octets jusqu'à la rencontre d'un caractère nul.
- Il faut savoir qu'une fonction retourne la valeur d'un nombre entier. Une fonction ne peut pas retourner une chaine ou un tableau. Elle peut rendre l'adresse d'une chaine. La solution consiste à passer en paramètre par adresse les données qui vont être changées par une fonction, car les paramètres peuvent être passés par valeur ou par adresse.
- Il faut savoir que le signe étoile "*" a plusieurs significations et qu'il y a parfois des confusions avec le signe du crochet "[". Si on ne sait pas, on regarde des exemples qui marchent.
- Il faut distinguer le signe égal "=" et le double signe égal "==".
- Une donnée globale ou une fonction doit être redéclarée en indiquant "extern" quand elle est utilisée dans un autre fichier.
- Il ne faut pas utiliser typedef, enum, malloc, free, scanf, et les tableaux à plusieurs dimensions. Ces choses ne servent à rien dans la vraie vie.
- Pour la gestion des fichiers, il faut utiliser la famille de fonctions qui commence par "f" (fopen, fclose, fread, fwrite, fgets, fputs, ftell, fseek) et savoir la différence entre le mode texte et le mode binaire.
 
Voilà, avec ces connaissances, on peut programmer tout ce qu'on veut, sans que l'exécutable ne soit gros, avec un code simple, lisible et rapide.

n°2237605
gilou
Modérateur
Modzilla
Posté le 10-09-2014 à 13:49:28  profilanswer
 

Citation :

- Une donnée globale ou une fonction doit être redéclarée en indiquant "extern" quand elle est utilisée dans un autre fichier.


Pour un prototype de fonction, le mot extern est possible, mais ne fait rien de spécial, et dans la pratique, on ne l'emploie pas pour les prototypes. Quand à employer une variable globale qualifiée avec extern, c'est de la programmation de l'age de pierre (sauf cas spéciaux comme des variables en registres hardware) et écrire deux accesseurs à la get/set est ce qui se fait couramment.  
 

Citation :

- Il ne faut pas utiliser typedef, enum, malloc, free, scanf, et les tableaux à plusieurs dimensions. Ces choses ne servent à rien dans la vraie vie.

[:charles k:5]  
On doit pas avoir la même vie!
typedef est particulièrement utile lorsqu'il est suivi de struct, malloc/free idem quand tu alloues des tableaux de structures (bref des records), et les tableaux a deux dims, s'il veut faire du traitement d'image, euh...
Par contre, les enums et scanf, oui, on peut s'en passer.
 

Citation :

le C est beaucoup plus facile que le C++

Bof, pour les choses de base, non.
 
A+,


Message édité par gilou le 10-09-2014 à 14:01:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2237638
isanaud
Posté le 10-09-2014 à 15:37:24  profilanswer
 

effectivement les traitements des chaînes quand on vient de python :sweat:  
d'ailleurs je voudrais faire et parcourir un tableau de chaine je partais la dessus mais je sens l'impasse:
 char liste_rne[802]={'0950024K','0950050N','0950051P','0950052R','0950053S','0950056V','0950058X','0950059Y',.....}

n°2237643
tpierron
Posté le 10-09-2014 à 15:52:17  profilanswer
 

Mouais, le C / C++ sont assez hardcore comme langages. Va falloir lire quelques tutoriaux si tu veux te lancer là dedans. Sans un minimum de connaissance tu vas t'en prendre plein la figure (ie: crash, buffer overflow, stack overflow, undefined behavior, ...).
 
Une autre approche possible serait de regarder le langage LUA: il a un runtime très réduit (200 ou 300Ko de mémoire) et syntaxe/API beaucoup plus proche de python que du C/C++. C'est un langage qui a été prévu pour être embarqué avec des performances plutôt pas mal.
 
Si tu tiens vraiment à continuer en C/C++, va falloir commencer par les bases. Ta ligne de code montre que tu ne les as pas.

n°2237687
gilou
Modérateur
Modzilla
Posté le 10-09-2014 à 17:56:41  profilanswer
 

isanaud a écrit :

effectivement les traitements des chaînes quand on vient de python :sweat:  
d'ailleurs je voudrais faire et parcourir un tableau de chaine je partais la dessus mais je sens l'impasse:
 char liste_rne[802]={'0950024K','0950050N','0950051P','0950052R','0950053S','0950056V','0950058X','0950059Y',.....}


Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <array>
  4. int main()
  5. {
  6.     std::array<std::string, 802> liste_rne = {
  7.         "0950024K", "0950050N", "0950051P", "0950052R",
  8.         "0950053S", "0950056V", "0950058X", "0950059Y",};
  9.    
  10.     std::cout << "Le contenu de liste_rne est:" << std::endl;
  11.     for (auto x:liste_rne) std::cout << x << std::endl;
  12.     // imprimera 802 lignes, dont les 794 dernières vides  
  13.     return 0;
  14. }


A compiler avec les flags activant le C++11
A+,


Message édité par gilou le 10-09-2014 à 18:03:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2237716
isanaud
Posté le 10-09-2014 à 21:52:57  profilanswer
 

Bon, je m'en suis tiré avec une chaine de 8000 caracteres que je découpe en chaînes de 9 caractères.
L'exe est fonctionnel et fait 30 ko :pt1cable:  
Code::Blocks + MinGW forment un couple exceptionnel et c'est tellement simple à installé sous ubuntu !
Dommage qu'on soit limité au c ou c++  :(  
Merci pour vos conseils ! :jap:


Message édité par isanaud le 10-09-2014 à 22:18:36
mood
Publicité
Posté le 10-09-2014 à 21:52:57  profilanswer
 

n°2237860
olivthill
Posté le 12-09-2014 à 10:16:10  profilanswer
 

isanaud a écrit :

effectivement les traitements des chaînes quand on vient de python :sweat:  
d'ailleurs je voudrais faire et parcourir un tableau de chaine je partais la dessus mais je sens l'impasse:
 char liste_rne[802]={'0950024K','0950050N','0950051P','0950052R','0950053S','0950056V','0950058X','0950059Y',.....}


Le problème vient des apostrophes qui ont été mises alors qu'il fallait des guillemets pour des chaines.
Désolé de l'avoir oublié dans ma liste de recommandations.
 
En C, et C++, une apostrophe est utilisée pour un seul caractère. Par exemple 'a'. Il n'y a qu'un seul octet qui est réservé en mémoire. On ne peut pas écrire 'ab'. Mais on peut écrire '\n', car c'est le caractère spécial pour le retour à la ligne.
Mais le guillemet a un comportement différent. Par exemple "a". Cela réserve deux octets, dont le premier est rempli par la lettre a, et le second est rempli par un caractère nul.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  developper un petit exe pour windows

 

Sujets relatifs
Création d'un script ou btach de copie de fichier sous windowsAS3 - petit jeu Flash
shell windows gitbash ou cmder ?Petit problème d'alignement
USERNAME Windows en PHP[python] Afficher primitive/figure au premier plan (Windows)
Cherche personne expérimentée en VBS pour un petit coup de main !Petit probleme
petit_programe en bashPetit aide sur le logiciel Visual Basic 2010
Plus de sujets relatifs à : developper un petit exe pour windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR