OVH Cloud OVH Cloud

Ou est mon Erreur...

5 réponses
Avatar
Amin Moradi
Bonjour, est ce que quelqu'un peut me dire ou se trouve mon erreur.

car dans l'execution de mon application il n'execute pas la tache
shellexecute.
voici un bout du code si plus dite le moi

double N;
if (m_strBuffer2[17] == 0x00)
{
N=(m_strBuffer2[18]+m_strBuffer2[19]*pow(16,2)+m_strBuffer2[20]*pow(16,4))/1
000;
}
else
{
N=(m_strBuffer2[17]+m_strBuffer2[18]*pow(16,2)+m_strBuffer2[19]*pow(16,4))/1
000;
}
HWND hwnd;
strcpy (W,"wmvcopy -i rtspu://compaq1/point_publication2 -o d:\\2.wmv -d ");
sprintf (W+strlen(W),"%lf", N);
ShellExecute(hwnd, "open", W, NULL, NULL, SW_SHOWNORMAL);
Time=TRUE;

lorsqu'il arrive a shellexecute, il devrai m'ouvrir une fenêtre shell, et
lancé mon application.
Mais rien ne se fait.
je pense que mon erreur et dans l'ecriture du shellexecute.

(Wmvcopy est inscrit dans le PATH de Windows)

merci de votre aide.

5 réponses

Avatar
Fabien SK
Amin Moradi wrote:
Bonjour, est ce que quelqu'un peut me dire ou se trouve mon erreur.

car dans l'execution de mon application il n'execute pas la tache
shellexecute.
voici un bout du code si plus dite le moi


Ton erreur est de ne pas poser la question au bon endroit :-)
fr.comp.os.ms-windows.programmation ?

Avatar
Jacky Goyon
Ton problème ne concerne pas le langage C++ donc il vaut mieux poster ton
message sur le groupe
fr.comp.os.ms-windows-programmation.
Un début de réponse quand même : teste la valeur de retour de ShellExecute
et regarde la doc !

Jacky
Avatar
Mickael Pointier
Amin Moradi wrote:
Bonjour, est ce que quelqu'un peut me dire ou se trouve mon erreur.

car dans l'execution de mon application il n'execute pas la tache
shellexecute.
voici un bout du code si plus dite le moi

double N;
if (m_strBuffer2[17] == 0x00)
{

N=(m_strBuffer2[18]+m_strBuffer2[19]*pow(16,2)+m_strBuffer2[20]*pow(16,4

))/1
000;
}
else
{

N=(m_strBuffer2[17]+m_strBuffer2[18]*pow(16,2)+m_strBuffer2[19]*pow(16,4

))/1
000;
}


Hum, j'ai pas regardé exactement ce que faisait "pow", mais si je ne
m'abuse, pow(16,2) c'est bien égal à 16*16, et pow(16,4), égal à
16*16*16*16 ?
Si c'est le cas, autant remplacer les appels de fonction par les valeurs
en question, a mon avis ca sera plus lisible :)


N=(m_strBuffer2[18]+m_strBuffer2[19]*256+m_strBuffer2[20]*65536)/1000;


strcpy (W,"wmvcopy -i rtspu://compaq1/point_publication2 -o
d:2.wmv -d ");

sprintf (W+strlen(W),"%lf", N);


("W" à suffisament de place pour stocker tout ca ?)
Ca serait plus ismple de faire ca en une seule opération:

sprintf(W,"wmvcopy -i rtspu://compaq1/point_publication2 -o d:2.wmv -d
%lf",N);


ShellExecute(hwnd, "open", W, NULL, NULL, SW_SHOWNORMAL);


Tu devrais tester ce que retourne ShellExecute.
La valeur de retour t'indiquera probablement la cause du problème.

Sinon, au lieu de passer NULL au niveau des paramètres, tu peux
probablement faire ca:

sprintf(W,"-i rtspu://compaq1/point_publication2 -o d:2.wmv -d
%lf",N);
retour=ShellExecute(hwnd,"open","wmvcopy",W,NULL,SW_SHOWNORMAL);

et préciser le répertoire courant ne fera probablement pas de mal non
plus.


Mike

Avatar
Amin Moradi
merci beaucoup-


"Mickael Pointier" a écrit dans le message de
news: bpaot4$ef6$
Amin Moradi wrote:
Bonjour, est ce que quelqu'un peut me dire ou se trouve mon erreur.

car dans l'execution de mon application il n'execute pas la tache
shellexecute.
voici un bout du code si plus dite le moi

double N;
if (m_strBuffer2[17] == 0x00)
{

N=(m_strBuffer2[18]+m_strBuffer2[19]*pow(16,2)+m_strBuffer2[20]*pow(16,4

))/1
000;
}
else
{

N=(m_strBuffer2[17]+m_strBuffer2[18]*pow(16,2)+m_strBuffer2[19]*pow(16,4

))/1
000;
}


Hum, j'ai pas regardé exactement ce que faisait "pow", mais si je ne
m'abuse, pow(16,2) c'est bien égal à 16*16, et pow(16,4), égal à
16*16*16*16 ?
Si c'est le cas, autant remplacer les appels de fonction par les valeurs
en question, a mon avis ca sera plus lisible :)


N=(m_strBuffer2[18]+m_strBuffer2[19]*256+m_strBuffer2[20]*65536)/1000;


strcpy (W,"wmvcopy -i rtspu://compaq1/point_publication2 -o
d:2.wmv -d ");

sprintf (W+strlen(W),"%lf", N);


("W" à suffisament de place pour stocker tout ca ?)
Ca serait plus ismple de faire ca en une seule opération:

sprintf(W,"wmvcopy -i rtspu://compaq1/point_publication2 -o d:2.wmv -d
%lf",N);


ShellExecute(hwnd, "open", W, NULL, NULL, SW_SHOWNORMAL);


Tu devrais tester ce que retourne ShellExecute.
La valeur de retour t'indiquera probablement la cause du problème.

Sinon, au lieu de passer NULL au niveau des paramètres, tu peux
probablement faire ca:

sprintf(W,"-i rtspu://compaq1/point_publication2 -o d:2.wmv -d
%lf",N);
retour=ShellExecute(hwnd,"open","wmvcopy",W,NULL,SW_SHOWNORMAL);

et préciser le répertoire courant ne fera probablement pas de mal non
plus.


Mike






Avatar
Alexandre
"Amin Moradi" a écrit dans le message de
news:3fb8e205$
Bonjour, est ce que quelqu'un peut me dire ou se trouve mon erreur.


C'est HS ici, mais bon...


car dans l'execution de mon application il n'execute pas la tache
shellexecute.
voici un bout du code si plus dite le moi

double N;
if (m_strBuffer2[17] == 0x00)
{

N=(m_strBuffer2[18]+m_strBuffer2[19]*pow(16,2)+m_strBuffer2[20]*pow(16,4))/1

000;


Déjà, utiliser pow pour calculer des puissances de 16, c'est un peu prendre
le concorde pour faire paris-st denis.
Soit tu mets la constante en clair, soit tu utilises un décalage de bits...

}
else
{

N=(m_strBuffer2[17]+m_strBuffer2[18]*pow(16,2)+m_strBuffer2[19]*pow(16,4))/1

000;


La ligne est identique à la précédente, à qq valeurs prés, qui se trouvent
ête inférieure de 1....
Moi j'aurais fait 1 seule ligne...

}
HWND hwnd;
strcpy (W,"wmvcopy -i rtspu://compaq1/point_publication2 -o d:2.wmv -d
");

sprintf (W+strlen(W),"%lf", N);


C'est quoi W ? Un char[] ? Un char* ? Quelle est sa taille ?
De manière générale, c'est LE truc à éviter... Utilises plutot une
std::string (inclure <string>) comme ça :
std::string W;
W = "wmvcopy -i rtspu://compaq1/point_publication2 -o d:2.wmv -d ";
....

ShellExecute(hwnd, "open", W, NULL, NULL, SW_SHOWNORMAL);
Ici tu rempalces W par W.c_str() si tu utilises un std::string.

De plus, tu ne testes pas le retour de shellexecute. Difficile donc de
savoir ce qui pose problème....

Time=TRUE;

lorsqu'il arrive a shellexecute, il devrai m'ouvrir une fenêtre shell, et
lancé mon application.
Mais rien ne se fait.
je pense que mon erreur et dans l'ecriture du shellexecute.

(Wmvcopy est inscrit dans le PATH de Windows)

merci de votre aide.