Rundll32 : comment passer des parametres a une dll perso

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 945 fois - Téléchargée 27 fois

Contenu du snippet

j'etais tranquillement en train de coder une tite dll... toudlidoudidou lalala... quand tout a coup... une idée ! pourquoi creer une lancuer pr la dll sachant qu'il existe rundll32 ? c'est vrai, cet outil nous est fourni, autant l'utiliser ! ca evitera un exe de + qui traine ds program files ou je ne sais ou...
bon alors hop un ti peu de rechercher du coté de rundll32... hmmm keske c facile de lancer une dll !
ex: rundll32 ma_dll.dll, maFonction
mais un ti probleme se posait... comment passer des parametres ?
et c là que j'interviens :oP
bon alors j'essaie de mettre des parametres pour ma fonction et apres plusieurs essais infructueux, j'abandonne... l'idee des parametres seuleument :oD
hop, un ti tour sur le chan #programmation et là une idée de NitRic : pourquoi ne pas essayer GetCommandLine() ?
cette fonction retourne la ligne de commande executee pour la dll ou l'executable, alors un petit traitement de celle-ci et voila, les parametres peuvent maintenant etre recuperes dans la DLL !

Source / Exemple :


// c'est juste une tite fonction codée en 5min histoire de recuperer un certain mot ds une phrase...

// Retourne le nieme parametre d'une chaine
char* getParameter(char *line, int nb) {
    char old_char;
    char *str_start, *str_ret;
    int length;
    
    str_ret = NULL;
    length = -1;
    old_char = ' ';
    
    while(*line != '\0' && nb > -1) {
        if(*line != ' ' && old_char == ' ')
            nb--;
        
        if(nb == 0) {
            if(length == -1) {
                str_start = line;
                length = 0;
            }
            else
                length++;
        }
            
        old_char = *line;
        line++;
    }
    
    if(*line == '\0')
        length++;
    
    if(length > 0) {
        str_ret = new char[sizeof(char)*(length+1)];
        strncpy(str_ret, str_start, length);
        str_ret[length] = '\0';
    }
    
    return str_ret;
}

// voila avec ceci il ne vous reste plus qu'a faire ca dans la fonction appelée de votre dll :
// char *param = getParameter(GetCommandLine(), 1);
// ou *param est le parametre retourné et le 1 est le numéro du mot dans la phrase.

Conclusion :


voila, tite astuce simple mais utile !
j'espere ke ca vs servira... (mais non ce n'est pas un post pr raconter ma vie... bande de medisants :oP)

A voir également

Ajouter un commentaire

Commentaires

cs_azerty25
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007
-
pourquoi passer par rundll, tu peux pas par une ligne de commande directe ?!
nicolas_laisney
Messages postés
4
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
12 mars 2004
-
Pour Azerty25 : Ben non, une DLL n'est normalement pas un programme indépendant, mais un morceau... essaie donc d'exécuter une DLL comme ça...
D'où le lancement de DLLs avec Rundll, lorsqu'elles sont utilisées en "stand-alone".

Donc moi je dis pas mal comme astuce, j'en n'ai pas besoin maintenant mais qui sait... quand on sait que ça existe on trouve plus facilement l'utilité ;o)

Merci !
nicolas_laisney
Messages postés
4
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
12 mars 2004
-
Oups, boulette ! :(
En voulant noter, j'ai raté ma cible, et j'ai cliqué sur le bouton au lieu de la combo... (trop c** le mec !)
Donc la note envoyée a été 5 (par défaut), au lieu du 8 que je voulais mettre.
Désolé !
cs_azerty25
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007
-
EN effet, t'a raison, j'avai oublié que c'était une DLL :-/ Merci pour l'astuce !
Pour la note, je t'ai mis 10, sa corrige la ptite erreur de nico ;)
ToasTy62
Messages postés
47
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
12 mars 2004
-
yeah thanks :oP
surtout si vs arriver a recuperer les parametres de rundll32 sans passer par l'astuce n'hesitez pas ca m'interesse ! mais bon je c po si c possible...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.