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

  FORUM HardWare.fr
  Programmation

  Visual C++ serait il fou ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Visual C++ serait il fou ?

n°32292
El_gringo
Posté le 16-05-2001 à 16:49:47  profilanswer
 

y a une erreur que je comprend pas du tout, est ce qu'on aurai pas le droit en c++ de faire ce que je fais !?
voila mon code qui pose pb :
 
long test = FDllAz70_map (session);
if (FDllAz70_map (session) < 0)
{
    CString messErreur;
    .....
]
 
grâce à test je vois que la fonction un long négatif (constante rendue par la fonction !)
et pourtant, par le débugger, je vois que ça fait le contraire de la normale pour mon if : si je met <0 ça y entre pas (ça devrait)
                            si je met >0 ça y entre (ça devrait pas !!)
 
g l'habitude des caprices du C++, mais là il est complètement fou, non ???? :crazy:

mood
Publicité
Posté le 16-05-2001 à 16:49:47  profilanswer
 

n°32296
Mara's dad
Yes I can !
Posté le 16-05-2001 à 16:54:22  profilanswer
 

Je ne connait pas le C++, mais ce genre de comportement me fait penser que l'appel de la fonction modifie la valeur !
 
Avec :

Code :
  1. long test = FDllAz70_map (session);
  2. if ( test < 0)
  3. {
  4.     CString messErreur;
  5.     .....
  6. ]


çà marche ?

 

[edit]--Message édité par Mara's dad--[/edit]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°32297
BENB
100% Lux.
Posté le 16-05-2001 à 16:58:58  profilanswer
 

El_gringo a écrit a écrit :

y a une erreur que je comprend pas du tout, est ce qu'on aurai pas le droit en c++ de faire ce que je fais !?
voila mon code qui pose pb :
 
long test = FDllAz70_map (session);
if (FDllAz70_map (session) < 0)
{
    CString messErreur;
    .....
]
 
grâce à test je vois que la fonction un long négatif (constante rendue par la fonction !)
et pourtant, par le débugger, je vois que ça fait le contraire de la normale pour mon if : si je met <0 ça y entre pas (ça devrait)
                            si je met >0 ça y entre (ça devrait pas !!)
 
g l'habitude des caprices du C++, mais là il est complètement fou, non ???? :crazy:




 
1- es-tu sur que la fonction renvoi bien un long ?
2- es-tu sur que chaque appel renvoie la meme chose
-> essaie quand meme : if (test<0)... pour voir

n°32298
El_gringo
Posté le 16-05-2001 à 16:59:46  profilanswer
 

non, mais de toute façon, je connais la fonction, elle renvois une constante qui n'change pas, c sur à 100%, je sais même qu'elle rend -555 à tout les coups (c juste une fonction de test, elle est faite pour ça !)

n°32300
BENB
100% Lux.
Posté le 16-05-2001 à 17:03:05  profilanswer
 

Et un petit Rebuild All ?

n°32301
Mara's dad
Yes I can !
Posté le 16-05-2001 à 17:04:32  profilanswer
 

Bon alors une idée :
Dans le test x < 0 où x est un long, c'est quoi le type de 0 ?
Si c'est pas un long, c'est qu'il fait un cast sur x ou sur 0 pour faire la comparaison non ?
Je me souvient avoir vu des truc dans le genre dans un bouquin Java (que j'ai pas sous la main)...
 
Dites moi si je dis une grosse connerie ! J'le prendrai pas mal.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°32305
Bounga69
Wii will rock you
Posté le 16-05-2001 à 17:07:34  profilanswer
 

bahhh c'est juste ça, je croyais qu'il t'avait mordu. Il peut parfois être très méchant ce VC++.  :D  :D  :D

n°32310
El_gringo
Posté le 16-05-2001 à 17:11:31  profilanswer
 

BENB a écrit a écrit :

 
 
1- es-tu sur que la fonction renvoi bien un long ?
2- es-tu sur que chaque appel renvoie la meme chose
-> essaie quand meme : if (test<0)... pour voir




 
1- je suis sur à 100% (voir plus !) que la fonction rend -555 à chaque appel
 
2- quand je fait le if(test < 0) ça fonctionne, j'avais déja essayé, je demande plus ça par curiosité !
 
sinon, Mara's dad, c pas un grosse connerie ce que tu dis
...une pas très grosse, ms qd même !
La conversion est implicite pour un chiffre comme 0, qu'soit comparé à un short, un int ou un long c pareil !

n°32317
BENB
100% Lux.
Posté le 16-05-2001 à 17:33:08  profilanswer
 

El_gringo a écrit a écrit :

 
 
1- je suis sur à 100% (voir plus !) que la fonction rend -555 à chaque appel
 
2- quand je fait le if(test < 0) ça fonctionne, j'avais déja essayé, je demande plus ça par curiosité !
 
sinon, Mara's dad, c pas un grosse connerie ce que tu dis
...une pas très grosse, ms qd même !
La conversion est implicite pour un chiffre comme 0, qu'soit comparé à un short, un int ou un long c pareil !




non mais le resultat de ta fct lui il donne quoi si on le cast ?
 
Je ne pense pas que ce soit ca quand meme, car sous visual int=long donc je ne pense pas qu'il y ait de cast, et, -555 caste en short je pense que ca reste -555...
J'y avais pense... mais ca ne me parait pa resonnable
 
Par contre il peut y avoir des bugs dans les compilos...

n°32318
BENB
100% Lux.
Posté le 16-05-2001 à 17:35:09  profilanswer
 

LA QUESTION IDIOTE PAR EXCELLENCE !
tu n'as pas ajoute un ; a la fin de la ligne if ?, non sinon ca entrerait...

mood
Publicité
Posté le 16-05-2001 à 17:35:09  profilanswer
 

n°32325
Mara's dad
Yes I can !
Posté le 16-05-2001 à 17:48:41  profilanswer
 

Problème de cast : c'est pas çà si "test < 0" passe . . .


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°32332
BENB
100% Lux.
Posté le 16-05-2001 à 17:58:01  profilanswer
 

Mara's dad a écrit a écrit :

Problème de cast : c'est pas çà si "test < 0" passe . . .




sauf si sa fct ne renvoie pas un long...

n°32333
El_gringo
Posté le 16-05-2001 à 17:59:48  profilanswer
 

BENB a écrit a écrit :

 
sauf si sa fct ne renvoie pas un long...




 
Mais arrêtes d'etre lourd, 'faut que je le répète combient de fois que je suis sur à 100% que ma fonction rend un long négatif !

n°32335
BENB
100% Lux.
Posté le 16-05-2001 à 18:02:06  profilanswer
 

El_gringo a écrit a écrit :

 
 
Mais arrêtes d'etre lourd, 'faut que je le répète combient de fois que je suis sur à 100% que ma fonction rend un long négatif !




Si je suis lourde, j'ai mes raisons :D
je parle de la declaration, du prototype de ta fonction.

n°32336
El_gringo
Posté le 16-05-2001 à 18:02:32  profilanswer
 

BENB a écrit a écrit :

LA QUESTION IDIOTE PAR EXCELLENCE !
tu n'as pas ajoute un ; a la fin de la ligne if ?, non sinon ca entrerait...




 
J'aime pas tes aire supérieurs toi !
NON, y a pas de ; à la fin de la ligne du if ! (j'aurai un warning d'ailleur si y avait ça, tu devrais le savoir !)

n°32338
El_gringo
Posté le 16-05-2001 à 18:04:26  profilanswer
 

BENB a écrit a écrit :

 
Si je suis lourde, j'ai mes raisons :D
je parle de la declaration, du prototype de ta fonction.




 
Ma fonction est dans un dll de test qui fonctionne et qui me rend un long inférieur à 0, la preuve par le débugger:
avec
long test = maFonction(...);
if (test < 0)
{ ...
}
 
ça entre bien dans le if, c complètement fou comme truc !

n°32341
BENB
100% Lux.
Posté le 16-05-2001 à 18:11:26  profilanswer
 

El_gringo a écrit a écrit :

 
 
Ma fonction est dans un dll de test qui fonctionne et qui me rend un long inférieur à 0, la preuve par le débugger:
avec
long test = maFonction(...);
if (test < 0)
{ ...
}
 
ça entre bien dans le if, c complètement fou comme truc !




 
Tu ne veux absolument pas comprendre ce que je dis...
imaginons que ta fonction soit Toto maFonction()
avec class Toto
{
 operator long()
 {
  return -555;
 }
 bool operator<(int)
 {
   return false;
 }
 bool operator>(int)
 {
  return true;
 }
};
 
Bon c'est une caricature, mais c'est pour cela que j'insiste pour savoir ce que renvoie ta fonction reelement, le fait que test recoie -555 ne prouve en fait pas grand chose si il y a quelque chose de tordu derriere...

n°32342
BENB
100% Lux.
Posté le 16-05-2001 à 18:13:53  profilanswer
 

El_gringo a écrit a écrit :

 
 
J'aime pas tes aire supérieurs toi !
NON, y a pas de ; à la fin de la ligne du if ! (j'aurai un warning d'ailleur si y avait ça, tu devrais le savoir !)




J'en ai vu plus d'un !
Et le warning depends d'abord du compilo, et comme je n'utilise plus Visual depuis quelques temps...

n°32347
El_gringo
Posté le 16-05-2001 à 18:34:59  profilanswer
 

BENB a écrit a écrit :

 
J'en ai vu plus d'un !
Et le warning depends d'abord du compilo, et comme je n'utilise plus Visual depuis quelques temps...




 
...c un client de ma boite qui m'a fournit la dll qui contient cette fonction; si y a un truc tordu comme ça, c vraiement qu'il veux pas que j'arrive à finir son truc ! :??:  :gun:

n°32350
VisualC++
J'va y penser ...
Posté le 16-05-2001 à 18:46:21  profilanswer
 

Mais cela peux expliquer ton probleme.
 
Sinon essaye quand meme de faire un rebiuild all pour etre sur qu'il y ai pas un reste d'une veille compile.


---------------
VT ... Vaucluse / Vrille(euse :sarcastic: ) c'est pareil tant qu'il y a l'humour :D
n°32356
Amadeus
Posté le 16-05-2001 à 19:51:52  profilanswer
 

Ecoutes si dans ton code
if (FDllAz70_map (session) < 0)  
{
...  
}
il n'entre pas dans l'accolade c'est que la condition n'est pas vérifiée et donc ta fonction ne retourne pas un entier négatif.
il peut s'agir d'un mauvais prototypage de la fonction : par exemple elle est déclarée ou définie comme retournant un unsigned ou alors elle ne retourne pas la valeur que tu attends.
En conclusion le c++ n'est pour rien dans ce pb :)
 

El_gringo a écrit a écrit :

y a une erreur que je comprend pas du tout, est ce qu'on aurai pas le droit en c++ de faire ce que je fais !?
voila mon code qui pose pb :
 
long test = FDllAz70_map (session);
if (FDllAz70_map (session) < 0)
{
    CString messErreur;
    .....
]
 
grâce à test je vois que la fonction un long négatif (constante rendue par la fonction !)
et pourtant, par le débugger, je vois que ça fait le contraire de la normale pour mon if : si je met <0 ça y entre pas (ça devrait)
                            si je met >0 ça y entre (ça devrait pas !!)
 
g l'habitude des caprices du C++, mais là il est complètement fou, non ???? :crazy:



n°32432
El_gringo
Posté le 17-05-2001 à 09:35:00  profilanswer
 

Amadeus a écrit a écrit :

Ecoutes si dans ton code
if (FDllAz70_map (session) < 0)  
{
...  
}
il n'entre pas dans l'accolade c'est que la condition n'est pas vérifiée et donc ta fonction ne retourne pas un entier négatif.
il peut s'agir d'un mauvais prototypage de la fonction : par exemple elle est déclarée ou définie comme retournant un unsigned ou alors elle ne retourne pas la valeur que tu attends.
En conclusion le c++ n'est pour rien dans ce pb :)
 
 




 
relis le reste du topic...ça doit faire la 15 fois que je dis que JE SUIS SUR que ma fonction REND UN LONG INFERIEUR A 0, puisque c'est une fonction de test qui pour l'instant ne sert qu'a simuler une erreur de la fonction (indiquée par un retour <0) ...pour faire une telle fonction:
LONG LaFonction(session)
{
    return -555;
}
 
c qd même pas trop dur, et l'erreur n'est pas trop possible sur ce point là...je crois, à moins que mon client ne soit un gros neunoeud

n°32446
Mara's dad
Yes I can !
Posté le 17-05-2001 à 09:59:25  profilanswer
 

El_gringo a écrit a écrit :

 
 
relis le reste du topic...ça doit faire la 15 fois que je dis que JE SUIS SUR que ma fonction REND UN LONG INFERIEUR A 0, puisque c'est une fonction de test qui pour l'instant ne sert qu'a simuler une erreur de la fonction (indiquée par un retour <0) ...pour faire une telle fonction:
LONG LaFonction(session)
{
    return -555;
}
 
c qd même pas trop dur, et l'erreur n'est pas trop possible sur ce point là...je crois, à moins que mon client ne soit un gros neunoeud




 
Si je comprends bien, t'es SUR, mais t'as pas vérifié !
Et la fonction que t'utilise, c'est bien la bonne version...
 
Je dit çà, mais çà explique pas que ta variable test contienne -555. Reste donc le type...
 
Désolé d'insister, je sais que c'est chiant, mais en générale la solution la plus simple étant la bonne...
En plus t'as surement déjà vérifié, mais çà m'est déjà arrivé si souvent de voir CE QUE JE VOULAIS VOIR et pas ce qui était sous mes yeux !
 
Courrage ! Et tiend nous au courant...
 
Quand même, que se passe-t-il si tu écrit toi même la fonction dans le même pgm...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°32452
El_gringo
Posté le 17-05-2001 à 10:13:53  profilanswer
 

:jap: Merci tt le monde d'avoir essayé, tant pis pour ma curiosité, je contourne le problème, je fais avec une variable intérmédiaire.
Je vais supposer que l'erreur est dûe au fait que la fonction que j'utilise est un pointeur de fonction (vu que c une fonction de dll), même si en toute logique ça change pas grand chose.
 
Bien sur le sujet est pas clos, je reviendrai voir de temps en temps ce que vous en pensez...c'est quand même étrange tout ça, qu'y aurai un malédiction ou un truc du style derrière tout ça qu'ça m'étonnerai pas.
A moins qu'un esprit rationnel éclairé vienne tenter sa chance :sarcastic:

n°32453
BENB
100% Lux.
Posté le 17-05-2001 à 10:14:22  profilanswer
 

El_gringo a écrit a écrit :

 
 
...c un client de ma boite qui m'a fournit la dll qui contient cette fonction; si y a un truc tordu comme ça, c vraiement qu'il veux pas que j'arrive à finir son truc ! :??:  :gun:




Je suis desolee de te faire chier, mais si tu fais confiance a tes clients tu es foutu !

n°32456
Mara's dad
Yes I can !
Posté le 17-05-2001 à 10:18:44  profilanswer
 

D'accord avec BENB, faut jamais faire confiance à personne ;-)
Surtout pas à ceux qui passent leur temps sur les forums...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°32477
Amadeus
Posté le 17-05-2001 à 10:44:57  profilanswer
 

Je maintiens ce que j'ai dit si ta fonction retourne un entier négatif tu dois rentrer dans l'accolade : c'est d'une simplicité biblique. Donc ta fonction ne retourne pas un entier négatif !!!
Et puisque il s'agit d'une fonction contenue dans une dll que tu n'as pas faite comment tu peux être aussi sûr de toi ?

n°32486
El_gringo
Posté le 17-05-2001 à 10:50:09  profilanswer
 

Amadeus a écrit a écrit :

Je maintiens ce que j'ai dit si ta fonction retourne un entier négatif tu dois rentrer dans l'accolade : c'est d'une simplicité biblique. Donc ta fonction ne retourne pas un entier négatif !!!
Et puisque il s'agit d'une fonction contenue dans une dll que tu n'as pas faite comment tu peux être aussi sûr de toi ?




 
 
...tout simplement parce que g appelé le type qui a fait la Dll qui m'a certifié que sa fonction est toute simple; qu'il l'a testée (et moi aussi d'ailleur !).
 
Mais vous penser pas que ça peut etre du au fait que ma fonction est en fait un pointeur de fonction !? (peut etre que du coup il n'aime pas que ça soit directe dans un if)

n°32495
Amadeus
Posté le 17-05-2001 à 10:56:14  profilanswer
 

Je suppose que t'as un header de ta dll. Dans ce cas commenet est déclarée cette fameuse fonction ?

n°32497
BENB
100% Lux.
Posté le 17-05-2001 à 10:58:02  profilanswer
 

Je continue a penser que c'est le prototype de ta fonction qui est faux, "long negatif" n'etant pas un type du C/C++ j'attend toujours de savoir ce qu'elle renvoie cette fichue fonction : un short, un long, un unsigned long ou autre chose ?
 
Tres souvent tes problemes ne viennent pas du code que tu nous donne....

n°32512
El_gringo
Posté le 17-05-2001 à 11:07:12  profilanswer
 

BENB a écrit a écrit :

Tres souvent tes problemes ne viennent pas du code que tu nous donne....




 
...ça c un peu vrai par contre, g constaté aussi :na:  
mais j'veux pas mettre tt mon listing, et c pas simple de cibler la source d'une erreur...dont tu n'connais pas la source justement !
 
mais voici la déclaration de la fonction dans mon header:
 
MODULEAPI LONG __stdcall AZ70_map(LPSTR);

n°32758
246tNt
Resistance is futile
Posté le 17-05-2001 à 18:34:57  profilanswer
 

Et avec
 
if ( (FDllAz70_map (session)) < 0)
{
    CString messErreur;
    .....
]
 
 
Ca donne quoi ?

n°32768
Amadeus
Posté le 17-05-2001 à 19:07:29  profilanswer
 

Tout d'abord la déclaration de ta fonction n'est pas très courante : moi d'hab mes fonct° exportées sont déclarées comma ça :
 
extern "C" _declspec(dllexport) type_de_retour MaFonctionExportee();
 
mais bon...
 
sinon à quoi sert l'arg LPSTR de ta fonction si elle retourne toujours, comme tu dis, -555 ?
A priori s'il une fonction a un arg c'est qu'elle fait certaines choses qui dépendent de la valeur de cet arg ou qu'elle modifie la valeur de l'arg si c'est un ptr ou une var passée par référence.
C'est vraiment pas clair cette histoire...

n°32790
gilou
Modérateur
Modzilla
Posté le 17-05-2001 à 22:02:03  profilanswer
 

246tNt a écrit a écrit :

Et avec
 
if ( (FDllAz70_map (session)) < 0)
{
    CString messErreur;
    .....
]
 
 
Ca donne quoi ?




 
Oui, c'est la premiere question que je me suis pose en lisant son code.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°32828
El_gringo
Posté le 18-05-2001 à 09:02:59  profilanswer
 

gilou a écrit a écrit :

 
 
Oui, c'est la premiere question que je me suis pose en lisant son code.
A+,




 
...bah 'fallait me la poseer avant, j'essaye !

n°32829
El_gringo
Posté le 18-05-2001 à 09:06:29  profilanswer
 

246tNt a écrit a écrit :

Et avec
 
if ( (FDllAz70_map (session)) < 0)
{
    CString messErreur;
    .....
]
 
 
Ca donne quoi ?




 
 
...ça donne pareil !

n°32831
El_gringo
Posté le 18-05-2001 à 09:10:25  profilanswer
 

Amadeus a écrit a écrit :

Tout d'abord la déclaration de ta fonction n'est pas très courante : moi d'hab mes fonct° exportées sont déclarées comma ça :
 
extern "C" _declspec(dllexport) type_de_retour MaFonctionExportee();
 
mais bon...
 
sinon à quoi sert l'arg LPSTR de ta fonction si elle retourne toujours, comme tu dis, -555 ?
A priori s'il une fonction a un arg c'est qu'elle fait certaines choses qui dépendent de la valeur de cet arg ou qu'elle modifie la valeur de l'arg si c'est un ptr ou une var passée par référence.
C'est vraiment pas clair cette histoire...




 
T'as pas lu tout le topic, normal, y commence à être gros (logique, c tellement bizare ce truc...). Mais j'disais que pour l'instant c seulement une dll de test que j'ai, donc l'argument que je passe ne sert, pour l'instant à rien du tout. Là, j'écrit dans un fichier .ini la valeur que me renverra la fonction (pour mettre en place la gestion des erreurs en simulant ces dernières dans la valeur de retour de la fonction) après on mettra la vraie dll, et hop, le tour sera joué.
Mais tout ça ça résout pas la question (que, je l'dis encore, je n'pose que par curiosité, parce que c facile de contourner le problème !) :hello:

n°32833
BENB
100% Lux.
Posté le 18-05-2001 à 09:16:11  profilanswer
 

et
if ( ((int)(FDllAz70_map(session)))<0)
ou
if( FDllAz70_map(session) < 0L )

n°32851
youdontcar​e
Posté le 18-05-2001 à 10:23:49  profilanswer
 

El_gringo a écrit a écrit :

y a une erreur que je comprend pas du tout, est ce qu'on aurai pas le droit en c++ de faire ce que je fais !?
voila mon code qui pose pb :
 
8< 8<  
 



et ... tu as essayé de debugger ? :D :D  
 
* tu mets un breakpoint devant ton if  
* ensuite f11 pour rentrer dans la fonction (tu vas passer en debug assembleur car tu n'as pas les sources de la dll )
* shift f11 pour éxécuter immédiatement la fonction  
* ctrl tab pour revenir à ta source
* maintenant dans la fenêtre 'variables', tu auras "FDllAz70_map returned xxxx"
 
et si xxx ne vaut pas -555, ton client s'est foutu de toi :)

n°32858
n0mad
inscrit au XXe siècle
Posté le 18-05-2001 à 10:31:27  profilanswer
 

Si ta fonction est déclaré en "stdcall" (MODULEAPI LONG __stdcall AZ70_map(LPSTR);), vérifie que ton linker soit aussi configuré en stdcall (Setting > Linker). Si ce n'est pas le cas, il y a des problèmes de transferts de paramètres.
 
Maintenant, on linke plutot en cdecl


---------------
Pipiru piru piru pipiru pi
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Visual C++ serait il fou ?

 

Sujets relatifs
Changer le port FTP en Visual C++Tutorial sur le multi-threading en Visual C++
Debutant pur en Visual c++visual c++ 6.0 : lancer un fichier htm??
tres simpple en visual basicVisual C++ déconne chez moi depuis l'install du SP5....
Acces 2000 et Visual Basic[VISUAL C++] répéter une action sans bloquer l'application
[visual . NET] remplir une datagrid!!![visual basic] encore un truc tout con que je trouve pas
Plus de sujets relatifs à : Visual C++ serait il fou ?


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