Pb : exporter une fonction retournant une valuer pointeur...

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 31 déc. 2004 à 23:35
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 1 janv. 2005 à 21:18
Bonsoir tout le monde!

Je reste surpris....je n'arrive pas à exporter une fonction de ma DLL !! En fait, je vous explique, dans une DLL que j'ai crée, il y a plusieurs fonctions, que je peut exporter (au moyen de __declspec(dllexport))...mais une et une seule ne veut pas se laisser exporter!!! Allez savoir pourquoi !!

Sa syntaxe :

char* DLLEXPORT MyFunc(char* szBuffer)

Je sais, par test, que c'est le * qui gene car si je lui fait retourner nimporte quoi d'autre comme un int, DWORD, etc, la fonction s'exporte sans problême!! Je peux comprendre qu'il s'agisse d'une sécurité afin d'éviter de renvoyer des adresses mémoires...mais moi, dans mon cas, je fait comment pour que ma fonction me renvoie une chaine de caractères ??

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))

15 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2005 à 00:00
Aucune raison qu'on ne puisse pas exporter 'char*' au meme titre que quoi que ce soit d'autre.

ciao...
BruNews, MVP VC++
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 02:18
Oui, enfin c dev, fo pas chercher à comprendre! lol! pour résoudre le probleme, j'ai fait retourner un LPSTR, ça marche maintenant! Pour te dire, je crois qu'il est vraiment trop à la masse ce compilo....j'ai une instructions switch() dans mon prog tout bien placé et il ne l'execute même pas!! lool, sans aucune raison!!! c'est trop abusé! lol!

  register int j;
  
  for(j = 0; szModel[j] != '\0'; j++) {
   
   if((szModel[j] >= 97) && (szModel[j] <= 122))
    buf[j] = szModel[j] - 32;
   
   else
    buf[j] = szModel[j];
   
   switch(buf[j]) {
        
     case 129: case 150: case 151: case 154: case 163: buf[j] = 85; break; // U
     case 130: case 136: case 137: case 138: case 144: buf[j] = 69; break; // E
     case 131: case 132: case 133: case 134: case 142: case 143: case 160: buf[j] = 65; break; // A
     case 135: buf[j] = 67; break; // C
     case 139: case 140: case 141: case 161: buf[j] = 73; break; // I
     case 147: case 148: case 149: case 153: case 162: buf[j] = 79; break; // O
     case 152: buf[j] = 89; break; // Y  
    }         
  }


le switch() n'est jamais executé, allez comprendre pourquoi ^^

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 janv. 2005 à 04:30
"Pour te dire, je crois qu'il est vraiment trop à la masse ce compilo"

Allons allons, j'utilise le même compilateur (MinGW/GCC) que DevC++, et le seul truc "à la masse" comme tu dis était le support bancal de l'unicode qui n'a été ajouté qu'avec la version 3.4.2, jamais eu aucun problème avec les DLL. Donc, soit le problème vient de toi, soit il vient de l'environnement, mais en aucun cas il ne vient du compilateur ;-)

Et je ne vois pas en quoi le code que tu montres est représentatif du problème ?
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 12:40
Justement nébula, il est la le pb!! Justement, il n'y a rien qui justifie que cette instruction switch() ne soit pas executé, le code qui suit ou précède ne montre rien de +! lol! J'ai toujours pas compris pourquoi, lol, c'est le mystère de la nouvelle année, je vais chercher, et si je trouve, je vous tiens au courant!! :-)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
1 janv. 2005 à 16:31
les yeux fermé, ton buf n'est pas de type entier ...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2005 à 16:37
Tu peux direct enchainer avec explication signed <-> unsigned, je sens la question arriver.

ciao...
BruNews, MVP VC++
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 17:06
plus_plus_fab> ben si, enfin disons que buf c'est une char* mais buf[nombre] c'est un char, donc un int aussi...non ?

BruNews> Je n'ai absolument rien compris, ni à ton conseil, ni à la question que je suis sensé te poser! ^^ désolé....:s

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 janv. 2005 à 17:16
quelles sont les plages de valeurs d'unoctet SIGNE ???
Peut-il entrer dans ton switch un jour ?

ciao...
BruNews, MVP VC++
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 17:27
euh, -127, +127 :s, oui oui mince...lolll

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 18:27
Mais en fait, je vois pas comment faire moi pour les mettres dans un unsigned int...:s qqun peut-il m'aider ??

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 janv. 2005 à 18:34
Un bête cast : switch((unsigned) buf[j])

Ou sinon tu mets des chars dans ton switch, case 'A': case 'X': etc
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 18:40
Mouais mais c'est trop bizarre, j'ai mis avec les case 'lettre' mais je trouve ça trop trop pas normal....par exemple case 'é' et case 130, pour moi c'est la même chose, par pour le compilo ni pour vous apparamment, je comprend pas pourquoi....

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
1 janv. 2005 à 18:46
Enfin, ça marche....mais jtrouve ça louche quand même! lol

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 janv. 2005 à 19:05
Ben y'a rien à comprendre, par défaut en C un char est signé et n'atteindra jamais 130, puisque limité à 127. Après, tu peux forcer des chars non signés mais c'est pas recommandé : pense aux autres quand ils voudront comprendre/réutiliser ton code ! Sans parler de ceux qui voudront juste le recompiler chez eux et n'utilisent pas le même environnement que toi, il n'est pas dit qu'ils penseront à positionner cette option dans leur compilateur...

Par ailleurs, je trouve l'emploi des valeurs littérales comme 'A' plus clair qu'un code ascii, m'enfin c'est une question de goût, je suppose.
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
1 janv. 2005 à 21:18
"par défaut en C un char est signé"

sur PC, SPARC aussi, mais pas dans le cas général. Le fait qu'un char puisse etre signé ou non signé dépend de l'implémentation.
0
Rejoignez-nous