IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Faire un daemon


Sujet :

Administration système

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut Faire un daemon
    Bonjour,

    J'ai développé une application pour un module embarqué avec busybox, je cherche a transformer mon programme, qui se lance pour le moment par ligne de commande, en daemon pour qu'il se lance au démarrage de linux.

    Si quelqu'un peut m'expliquer comment faire, je suppose que je doit quelque part configurer un fichier linux pour qu'il lance mon executable au démarrage. Par contre je ne sais pas si il faut modifier quelque chose dans le code de mon programme.


    Merci d'avance !

  2. #2
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut
    Mets le dans le inittab ou dans les répertoires /etc/rc.d/rcx.d/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Ok merci !

    Je n'ai pas lesrépertoires /etc/rc.d/rcx.d/ dans mon système embarqué par contre j'ai bien sûr l'initab.

    Voilà mon inittab
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #
    # inittab
    #
    #  <ID>:<RUNLEVEL>:<ACTION>:<PROCESS>
    #
    # Possible actions are:
    #
    # 	sysinit
    #	respawn
    #	askfirst
    #	wait
    #	once
    #	restart
    #	ctrlaltdel
    #	shutdown
    #
    # This is run first except when booting in single-user mode.
    ::sysinit:/etc/init.d/rcS
     
    # /bin/sh invocations on selected ttys
    #
    # Start an "askfirst" shell on the console (whatever that may be)
    ::respawn:/sbin/inetd
    ::respawn:/sbin/thttpd -c /cgi-bin/
     
    # use agetty instead directly connecting sh to console, ttyS0 or ttyS1
    # to enable Ctrl-C and Ctrl-\
    #::respawn:/sbin/agetty /dev/ttyS0 /bin/sh -l
    #::respawn:/sbin/agetty /dev/ttyS1 /bin/sh -l
     
    #::respawn:-/bin/sh
     
    ## Start an "askfirst" shell on /dev/tty2-4
    #tty2::askfirst:-/bin/sh
    #tty3::askfirst:-/bin/sh
    #tty4::askfirst:-/bin/sh
     
    # Example of how to put a getty on a serial line (for a terminal)
    #
    #null::respawn:/sbin/getty -L ttyS0 38400 vt100
     
    # Stuff to do when restarting the init process
    #::restart:/sbin/init
     
    # Stuff to do before rebooting
    Pourrais tu m'expliquer le fonctionement du fichier ? Les "::sysinit:", "::respawn:", "null::respawn:" "tty2::askfirst:", "::restart:", ......

    Et comment mettre mon appli qui se trouvera par exemple dans "/bin".

  4. #4
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Tu devrais avoir /etc/init.d car tu as la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::sysinit:/etc/init.d/rcS
    dans ton inittab. C'est ici que les scripts sont lancés au démarrage. Je ne connais pas busybox, mais su Debian par exemple pour lancer un programme au démarrage il faut :

    - Placer un script dans /etc/init.d/monscript
    - S'assurer qu'il soit executable (chmod +x)
    - Lancer en root : update-rc.d monscript defaults

    Pour un exemple de script tu peux regarder ce qui existe déjà, il faut faire un case sur l'argument, et gérer les cas : start, stop, restart. Eventuellement status si tu veux faire le pro
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par dbprog
    Tu devrais avoir /etc/init.d car tu as la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::sysinit:/etc/init.d/rcS
    dans ton inittab. C'est ici que les scripts sont lancés au démarrage. Je ne connais pas busybox, mais su Debian par exemple pour lancer un programme au démarrage il faut :

    - Placer un script dans /etc/init.d/monscript
    - S'assurer qu'il soit executable (chmod +x)
    - Lancer en root : update-rc.d monscript defaults

    Pour un exemple de script tu peux regarder ce qui existe déjà, il faut faire un case sur l'argument, et gérer les cas : start, stop, restart. Eventuellement status si tu veux faire le pro

    Oui effectivement je dois l'avoir puisque la ligne est présente dans le code. Pourtant j'ai regardé et ca n'y été pas, ca doit être en fichier caché, je regarderai ca lundi.

    Par contre j'au réussi a faire mon daemon, en modifiant tout simplement le fichier inittab. J'y ai ajouté la ligne suivante.

    ::respawn:/appli/mon-prog

    J'ai également du modifier l'un des fichier appellés lors de la création de l'image linux de mon module embarqué, afin de créer le répertoire appli dans le système et y copier mon programme.

  6. #6
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Il n'y a pas de fichiers cachés sous Linux
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  7. #7
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par dbprog
    Il n'y a pas de fichiers cachés sous Linux


    Et les fichiers commencant par un . ils sont pas cachés ceux la?

    Tu ne les vois pas en faisant un ls ou sur ton interface graphique
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  8. #8
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Certes, je crois que j'ai un peu trop l'habitude de mon alias ls=ls -al

    Quoiqu'il en soit il n'y a rien de caché dans /etc/init.d, ou alors c'est pas normal ! (à ma connaissance en tout cas)
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  9. #9
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    question à 0.00001€ comment vas-tu communiquer avec ton daemon ?
    Nul ne peut mieux connaitre la connaissance qu'elle-même.

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    Bonjour,
    Lancer un daemon à partir de l'inittab n'est pas une tres bonne idée pour une raison philosophique.
    L'inittab fixe le comportement du programme init (premier processus). Il décrit les taches que celui-ci doit effectuer pour chaque runlevel. En ce sens, il doit être géneraliste (il s'agit de lancer le système pas des programmes).
    L'inittab fait ensuite appel aux scripts dans /etc/init.d/ pour initialiser un certain nombre de choses :
    _ Montage des systèmes de fichiers
    _ Lancement de daemon
    et éventuellement l'initialisation des variables
    Ensuite, il ouvre les consoles avec le programme approprier (getty ...)

    Par ailleurs, pour lancer un daemon proprement, on utilise l'utilitaire start-stop-daemon qui est fournis avec busybox.

    Donc pour ton problème, le plus simple est sans doute de rajouter au moment propice dans rcS quelque chose comme : /etc/init.d/mon_daemon start.
    Puis d'éditer le fichier mon_daemon pour le faire ressembler au fichier /etc/init.d/skeleton sous Debian

    Ainsi tu pourra entre autre arréter ton programme proprement ( /etc/init.d/mon_daemon stop )

    A+
    Joris

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par swirtel
    question à 0.00001€ comment vas-tu communiquer avec ton daemon ?

    Je ne suis pas sure de comprendre ta question, mais mon daemon communique via le port série avec un lecteur de carte à puce. Le but est de scruter en permanence la présence d'une carte et quand il y en a une qui se badge de lire et d'afficher en fonction de celle-ci des infos sur un petit écran LCD.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par dbprog
    Tu devrais avoir /etc/init.d car tu as la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::sysinit:/etc/init.d/rcS
    Bon alors effetivement j'ai bien un fichier "/etc/init.d/rcS" qui n'est pas en fichier caché, j'avais pas fait gaf car en premier lieu usf70 m'avait dit de regarder dans "/etc/rc.d/rcx.d/". Répertoire que je n'ai pas et j'avais pas fait gaf que par contre j'avais "/etc/init.d/rcS". Enfin rien de bien garve, je ferai plus attention la prochaine fois.

    Alors voici mon fichier rcS :
    #!/bin/sh

    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH

    echo "Mounting other filesystems ..."

    /bin/mount -a

    # tmp fs should be world-writeable and mount has no option umask=
    chmod 777 /ram

    # Local IP
    /sbin/ifconfig lo 127.0.0.1
    /sbin/route add -net 127.0.0.0 netmask 255.255.255.0 lo

    # read EEPROM and run scripts
    /sbin/eeprom -r /etc/init.d/eeprom.sh

    if [ -e /dev/misc/rtc ]; then
    echo "Setting system time"
    /sbin/hwclock --hctosys
    date
    fi
    Bon alors d'après d-jo, j'ai cru comprendre que la méthode que j'ai employé en modifiant inittab n'est pas la bonne. Dommage je trouvai que ca marcher bien, en plus la méthode respawn est assez sympa, car si mon appli devait pour quelconque raison s'arretter ou planter elleredémarre aussi tôt grâce a cette méthode.

    Alors apparement il faut plutôt que je modifie rcS, mais comment ? Quelqu'un pourrait t'il me montrer sur l'exemple que j'ai mis ci dessus.

  13. #13
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Est-ce que tu as quelque chose dans /etc/init.d ? => ls -al /etc/init.d
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par dbprog
    Est-ce que tu as quelque chose dans /etc/init.d ? => ls -al /etc/init.d

    Oui oui finalement j'ai bien quelque chose, c'est ce que je disais dans mon dernier post.

    J'ai 2 fichiers :
    - rcS
    #!/bin/sh

    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH

    echo "Mounting other filesystems ..."

    /bin/mount -a

    # tmp fs should be world-writeable and mount has no option umask=
    chmod 777 /ram

    # Local IP
    /sbin/ifconfig lo 127.0.0.1
    /sbin/route add -net 127.0.0.0 netmask 255.255.255.0 lo

    # read EEPROM and run scripts
    /sbin/eeprom -r /etc/init.d/eeprom.sh

    if [ -e /dev/misc/rtc ]; then
    echo "Setting system time"
    /sbin/hwclock --hctosys
    date
    fi
    - eeprom.sh
    #! /bin/sh
    # This file will run various features if enable in EEPROM
    # It doesn't wait for the mounts to complete so that the target
    # continues to boot even on network problems

    if [ "x$NFSMOUNT" != "x" ]; then
    echo "Mounting $NFSMOUNT to /nfs"
    /bin/mount -o nolock -t nfs $NFSMOUNT /nfs
    fi

    if [ "x$CUSTOMSCRIPT" != "x" ]; then
    echo "Running $CUSTOMSCRIPT"
    /bin/sh $CUSTOMSCRIPT
    fi

    if [ "x$WATCHDOG" = "xyes" ]; then
    echo "Loading Watchdog driver"
    insmod netarm_watchdog.o
    fi
    eeprom.sh je crois qu'on s'en fou, tout se passe dans rcS, c'est bien çà ? Et comment faut faire ?

  15. #15
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    D'accord je vois, ça ne fonctionne pas tout à fait comme sous Linux normal. Dans ce cas je pense que tu peux tout simplement rajouter ton fichier dans /etc/init.d et il devrait démarrer tout seul.

    Dans ton script que tu rajoutes tu as juste à faire démarrer ton programme, comme si tu le lançais en ligne de commande. Si jamais ça ne fonctionne pas comme ça, rajoute une ligne dans rcS à la fin, là il n'y aura pas de problème je pense.

    Désolé de ne pas être plus précis, n'hésite pas à redemander si ça ne fonctionne pas !
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par dbprog
    D'accord je vois, ça ne fonctionne pas tout à fait comme sous Linux normal. Dans ce cas je pense que tu peux tout simplement rajouter ton fichier dans /etc/init.d et il devrait démarrer tout seul.

    Dans ton script que tu rajoutes tu as juste à faire démarrer ton programme, comme si tu le lançais en ligne de commande. Si jamais ça ne fonctionne pas comme ça, rajoute une ligne dans rcS à la fin, là il n'y aura pas de problème je pense.

    Désolé de ne pas être plus précis, n'hésite pas à redemander si ça ne fonctionne pas !
    Ok alors je rajoute un fichier dans le répertoireinit.d et ce fichier est un script qui démarre mon appli. Mais je lui donne quoi comme nom à ce fichier, il n'y a pas d erègles ? On fait ce qu'on veut, comment le système va faire pour le reconnaître.

    Et enfin si ca ne marche, la seconde solution est de de pas créer de fichier mais de mettre le contenu de ce script à la fin du fixchier rcS, c'est çà ?

    Désolé j'ai en gros reformulé ce que tu m'a dit mais je voudrais être sur d'avoir bien compris.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Bon alors j'ai essayer en insérant uniquement le fichier suivant dans init.d :

    solde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/sh
     
    # Lancement de l'appli de lecture de solde
    /appli/post
    Rien ne se passe au démarrage, je vais essyer d'ajouter la ligne suivante :
    /etc/init.d/solde
    à la fin du fichier rcS.

  18. #18
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    En fait ce que je voulais dire quand je disais d'ajouter la ligne dans /etc/rcS ce n'est pas d'ajouter celle que tu as marqué, mais celle-ci :

    Comme tu es sur que le script /etc/rcS est exécuté, rajoute cette ligne à la fin, ce qui devrait lancer ton application.

    Il faut que tu aies un moyen de contrôler le lancement aussi (ouverture de port, fichier pid, ... etc).
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Points : 33
    Points
    33
    Par défaut
    Bon ok alors j'ai refait le fichier rcS en y ajoutant à sa fin la ligne suivante :
    ca marche l'appli se lance après le démarrage, mais par contre je ne comprend pas pourquoi mais je n'arrive plus à prendre la main sur le module embarqué avec telnet. Et ca c'est pas bon pour moi.

    Ca ne me faisait pas ca quand je lancer l'appli depuis inittab avec la ligne :
    Citation Envoyé par dbprog
    Il faut que tu aies un moyen de contrôler le lancement aussi (ouverture de port, fichier pid, ... etc).
    Comment çà ???

  20. #20
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Tu n'as peut-être plus accès au telnet car le serveur ne démarre peut-être pas jusqu'au bout. Peut-être que ton appli ne quittant pas dans le rcS, l'initialisation du système ne se fait pas jusqu'au bout.

    Je ne sais pas si je suis très clair. Ce que je veux dire c'est que ton appli ne se terminant pas, le système ne s'initialise peut-être pas jusqu'au bout.

    Essaye peut-être de la lancer en rajoutant & à la fin.

    Si cela en fonctionne pas il faut créer un deamon dans le code directement. De manière à ce que ton appli sorte de sa boucle main (donc rend la main au système), tout en continuant son exécution en arrière plan.

    Pour ça il existe par exemple la fonction daemonize(). Mais je ne peux pas trop t'en dire plus je ne l'ai jamais utilisé. Un peu de google devrait t'aider là dessus. Essaye de regarder il existe eput-être d'autres fonctions pour passer un processus en deamon.

    Bon courage !
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


Discussions similaires

  1. [transmission-daemon] comment fair epour savoir si les torrents sont morts
    Par mapmip dans le forum Logiciels Libres & Open Source
    Réponses: 0
    Dernier message: 13/05/2015, 17h55
  2. faire un daemon ?
    Par panthere noire dans le forum Débuter
    Réponses: 1
    Dernier message: 20/02/2010, 02h11
  3. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  4. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo