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

  FORUM HardWare.fr
  Programmation
  C++

  [VC++] Problème étrange !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Problème étrange !

n°439845
Yoyo@
Posté le 26-06-2003 à 09:48:55  profilanswer
 

Salut,
 
Je suis victime d'un probleme vraiment bizarre, mon but étant de créer une Dll avec VC++ 6  et ensuite de l'utiliser avec Access. Cette dll se contente de retourner, a travers une fonction, un entier = 5 !
 
Alors, je crée cette dll (MFC dll-> regular Dll). Elle compile tres bien ! Alors, sur le meme ordinateur, j'y fait appel comme ceci :
 

Code :
  1. Private Declare Function getInt Lib "c:\ForVB.dll" Alias "AfficherMessage" () As Integer


 
tout en prenant soin de copier la dll générée sur C:\ !
 
Ensuite, je lance mon programme avec Access (VBA) et tout marche bien , le nombre est bien récupéré à partir de la dll !
 
Alors, l'idée me vient d'essayer cette dll sur un autre ordi, ne contenant pas Visual Studio, mais contenant Access ! Je fais la meme procédure, et la il me dit :
 
"Run-time error '53':
 
File not found : c:\forVB.dll"
 
Vraiment incroyable !  
 
Alors, juste pour le fun, je prends une dll quelconque de Windows (ici en loccurence aclui.dll), et je la copie sur c:\ tout en la renommant ForVB.dll !  
 
Et là, lorsque je lance mon programme Access, ca "marche", enfin, il me dit : "Can't find DLL Entry Point AfficherMessage...." ce qui pouve qu'il voit bien la DLL !
 
Est ce que vous arrivez à comprendre et m'expliquer la cause de tout ca? Est ce que ca vient du fait que je n'ai pas Visual Studio sur mon autre ordi?
 
Merci, Yoyo*

mood
Publicité
Posté le 26-06-2003 à 09:48:55  profilanswer
 

n°439848
chrisbk
-
Posté le 26-06-2003 à 09:50:21  profilanswer
 

:heink: :heink: :heink:
 
 
ben tu mets ta dll ForVB.dll dans le c:\ de l'autre PC (et la bonne hein, pas un vieux traficouillage comme tu nous as fait)
 
la vc il est y pour pas grand chose
 

n°439858
Yoyo@
Posté le 26-06-2003 à 10:09:30  profilanswer
 

chrisbk a écrit :

:heink: :heink: :heink:
 
 
ben tu mets ta dll ForVB.dll dans le c:\ de l'autre PC (et la bonne hein, pas un vieux traficouillage comme tu nous as fait)
 
la vc il est y pour pas grand chose
 
 


 
Bah, justement, c'est ce que je te dis : quand je mets la bonne ForVB.dll sur le C:\ de l'autre PC, il ne la voit pas, alors que quand je prends une dll quelconque de Windows, et que je la renomme en forVB.dll et que la mets sur c:\, il la voit m(ais ne peut l'utiliser of course !!)

n°439862
skeye
Posté le 26-06-2003 à 10:11:01  profilanswer
 

Yoyo@ a écrit :


 
Bah, justement, c'est ce que je te dis : quand je mets la bonne ForVB.dll sur le C:\ de l'autre PC, il ne la voit pas, alors que quand je prends une dll quelconque de Windows, et que je la renomme en forVB.dll et que la mets sur c:\, il la voit m(ais ne peut l'utiliser of course !!)


C'est exprès les variations au niveau de la 1ere lettre?
Une fois c'est f une fois c'est F...

n°439868
Yoyo@
Posté le 26-06-2003 à 10:14:49  profilanswer
 

skeye a écrit :


C'est exprès les variations au niveau de la 1ere lettre?
Une fois c'est f une fois c'est F...


 
Non, j'ai vérifié, j'ai bien mis "ForVB.dll" de partout !
 
Ce n'est donc pas un probleme de casse !

n°439879
HelloWorld
Salut tout le monde!
Posté le 26-06-2003 à 10:23:13  profilanswer
 

Le plus simple est de virer le c:\ devant ton nom, et de mettre ta dll soit dans system32, soit dans le répertoire d'Access. C'est un probleme avec Access / VBA, et moi Access ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°439893
Yoyo@
Posté le 26-06-2003 à 10:28:42  profilanswer
 

HelloWorld a écrit :

Le plus simple est de virer le c:\ devant ton nom, et de mettre ta dll soit dans system32, soit dans le répertoire d'Access. C'est un probleme avec Access / VBA, et moi Access ...


 
Voilà, je viens de le faire...
 
J'ai donc remplacé mon code par :  
 

Code :
  1. Private Declare Function getInt Lib "ForVB.dll" Alias "AfficherMessage" () As Integer


 
Et j'ai copié le fichier en question dans c:\windows\System32
 
Résultats :
1er PC : marche très bien
2eme PC : ne marche pas (meme symptome : File not Found !)
 
Vraiment chelou tout ça !

n°439945
Yoyo@
Posté le 26-06-2003 à 10:56:23  profilanswer
 

Bon, voila, j'ai trouvé une solution à mon probleme...
 
En fait, la dll dont je vous ai parlée, je l'ai crée en faisant New Project => MFC AppWizard (dll) et en regardant les dependencies (utilitaire depends.exe de VS), il me disait : MSVCRTTD.DLL, KERNEL32.DLL, MFC42D.DLL
 
Là, je viens de créer la meme Dll, mais en utilisant New Project => Win32 Dynamic-Link Library, et làdepends.exe me donne comme dépendance seulement KERNEL32.DLL !
 
Donc, comme je le pressentais, ma premiere dll ne maarchait pas sur mon ordi sans Visual Studio, car elle avait besoin de MFC42D.DL pour fonctionner (sans doute installé avec Visual Studio???)
 
Voilà !
 
Si vous avez des commenaires la dessus, n'hésitez pas !
 
Yoyo*

n°439952
chrisbk
-
Posté le 26-06-2003 à 10:59:36  profilanswer
 

T'as peu eu de bol alors, t'es tombé sur un message d'erreur a la con. A priori il a pas pu loader la dll (car les dependances n'ont pas pu etre assuree) et en a conclu que s'il a pas pu loader la dll c t parce qu'elle n'existait pas
 
(sorry pour mon premier post j'avais mal compris ton souc)
 
Neanmoins, MFC42D est comme son D l'indique une DLL de debug, essaye de compiler ta DLL en release et de voir si ca marche comme ca

n°439977
Yoyo@
Posté le 26-06-2003 à 11:25:20  profilanswer
 

chrisbk a écrit :

T'as peu eu de bol alors, t'es tombé sur un message d'erreur a la con. A priori il a pas pu loader la dll (car les dependances n'ont pas pu etre assuree) et en a conclu que s'il a pas pu loader la dll c t parce qu'elle n'existait pas
 
(sorry pour mon premier post j'avais mal compris ton souc)
 
Neanmoins, MFC42D est comme son D l'indique une DLL de debug, essaye de compiler ta DLL en release et de voir si ca marche comme ca
 


 
Parfait, ca marche :)
 
En fait, j'avais bien compris que tu n'avais pas trop compris ce que je disais( au vu de ta réponse), c'est donc pour ca que je t'avais répondu !
 
Sinon, comme tu dis, c'est "pas de bol", le prog me faisait croire qu'il ne trouvait pas le fihier, mais je me suis déouté que c'était pas vraiment le cas, et c'était d'ailleurs pour ca que j'avais pris un dll quelconque et renommé avec le nom de la dll que j'avais créée, et la, il m'a sorti une autre erreur !
 
En fait, je ne te cache pas que je ne connais aps encore beaucoup Visual C++ (j'ai pas assez d'expérience avec) et que je ne savais meme pas vraiment qu'il était possibl de créer des composants en debug ou en release (et d'ailleurs,q uelle est en gros la différence? La possibilité de debugger lorsque tu lances ton prog sous VS??), et je viens juste de découvrir qu'on pouvait changer ca en changeant "Set Active Configuration"
 
Donc, maintenant, ma Dll utilise MFC42.dll, MSVCRT.dll et Kernel32.dll
 
Est ce que ca veut dire qu'elle devrait normalement pouvoir tourner sous nimporte quel PC ayant Windows > 98?
 
D'autre part, en faisant un Win32 DLL, il n'y a plus toutes ces dépendances, seulement Kernel32.dll ! A quoi peuvent donc me servir les MFC? Ce serait par exemple pour les dialogues, ou les trucs du genre?
 
Merci en tout cas, j'y vois vraiment plus clair la dessus !

mood
Publicité
Posté le 26-06-2003 à 11:25:20  profilanswer
 

n°439981
chrisbk
-
Posté le 26-06-2003 à 11:27:45  profilanswer
 

ben debug comme son nom l'indique c du debug : aucune optim et visu insere des infos dans ton prog pour s'y retrouver.
release il optimise, vire l'inutile et tout ca
 
MFC42.dll, MSVCRT.dll sont fournies depuis pas mal de tps avec win, donc pas de soucis. Les MFC un ensemble de classe facilitant la creation d'appli (gestion des fenetres/composant et tout ce barda)

n°440050
Yoyo@
Posté le 26-06-2003 à 12:03:18  profilanswer
 

chrisbk a écrit :

ben debug comme son nom l'indique c du debug : aucune optim et visu insere des infos dans ton prog pour s'y retrouver.
release il optimise, vire l'inutile et tout ca
 
MFC42.dll, MSVCRT.dll sont fournies depuis pas mal de tps avec win, donc pas de soucis. Les MFC un ensemble de classe facilitant la creation d'appli (gestion des fenetres/composant et tout ce barda)
 


 
D'accord, c'est tres clair !
 
Et est ce que par exemple, les données du type CString font parties aussi du MFC? Et est ce que cette dll a évolué avec les versions de Windows (risques d'incompatbilités??)

n°440176
HelloWorld
Salut tout le monde!
Posté le 26-06-2003 à 13:31:45  profilanswer
 

Oui, tout ce qui est MFC (CString, Cxxx, ...) est dans la dll MFC. msvcrt c'est la runtime C, c'est les fonctions standards du C.
Ces dll évoluent, mais soient restent compatibles, soient possèdent un autre nom (avec la dernière version de VC++ et donc des MFC, c'est MFC70.dll.
MFC42.dll t'es à peu près sûr de la trouver sur tous les postes, la nouvelle non.
Si ta dll est simple, passe toi des MFC et utilise la STL.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°440612
Yoyo@
Posté le 26-06-2003 à 17:57:49  profilanswer
 

HelloWorld a écrit :

Oui, tout ce qui est MFC (CString, Cxxx, ...) est dans la dll MFC. msvcrt c'est la runtime C, c'est les fonctions standards du C.
Ces dll évoluent, mais soient restent compatibles, soient possèdent un autre nom (avec la dernière version de VC++ et donc des MFC, c'est MFC70.dll.
MFC42.dll t'es à peu près sûr de la trouver sur tous les postes, la nouvelle non.
Si ta dll est simple, passe toi des MFC et utilise

Code :
  1. la STL

.


 
La STL? Tu veux dire faire une Dll Win32 classique?

n°440616
chrisbk
-
Posté le 26-06-2003 à 17:59:40  profilanswer
 

Yoyo@ a écrit :


 
La STL? Tu veux dire faire une Dll Win32 classique?


nan, que si tu utilises que les CString des MFC alors autant laissé tomber et utiliser std::string

n°440683
Yoyo@
Posté le 26-06-2003 à 18:41:54  profilanswer
 

J'en déduis  :STL = Standard Library? Pour utiliser je dois faire un include spécial, genre string.h ou c'est inclus?

n°440851
Ace17
Posté le 26-06-2003 à 21:34:45  profilanswer
 

Yoyo@ a écrit :

J'en déduis  :STL = Standard Library? Pour utiliser je dois faire un include spécial, genre string.h ou c'est inclus?


 
Standard Template Library
 
En gros, ca rajoute des nouveaux types utiles, comme par exemple le type chaine de caracteres, ou encore le type liste.
HelloWorld te conseillait simplement une alternative aux MFC
 
edit : pour s'en servir tu fais par exemple :
 include <string> ( sans le .h )
Et tu dois aussi faire :
using namespace std;
Et la tu peux te servir du type string de la maniere suivante :
 
string a = "I love STL";


Message édité par Ace17 le 26-06-2003 à 21:38:59
n°440929
Yoyo@
Posté le 26-06-2003 à 22:16:11  profilanswer
 

Ace17 a écrit :


 
Standard Template Library
 
En gros, ca rajoute des nouveaux types utiles, comme par exemple le type chaine de caracteres, ou encore le type liste.
HelloWorld te conseillait simplement une alternative aux MFC
 
edit : pour s'en servir tu fais par exemple :
 include <string> ( sans le .h )
Et tu dois aussi faire :
using namespace std;
Et la tu peux te servir du type string de la maniere suivante :
 
string a = "I love STL";


 
<string> en l'occurence, ca fait référence à la template et non pas au header comme d'hab?
 
Et c'est normalisé C++ tout ca?

n°441205
HelloWorld
Salut tout le monde!
Posté le 27-06-2003 à 09:33:01  profilanswer
 

Oui, contrairement aux MFC.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°441285
Yoyo@
Posté le 27-06-2003 à 10:07:34  profilanswer
 

Ace17 a écrit :


 
Standard Template Library
 
En gros, ca rajoute des nouveaux types utiles, comme par exemple le type chaine de caracteres, ou encore le type liste.
HelloWorld te conseillait simplement une alternative aux MFC
 
edit : pour s'en servir tu fais par exemple :
 include <string> ( sans le .h )
Et tu dois aussi faire :
using namespace std;
Et la tu peux te servir du type string de la maniere suivante :
 
string a = "I love STL";


 
Concretement, je pourrais accéder à a comme si c'était un tableau?
 
Et en mémoire, il y aura quoi? : "I love STL/0" ?

n°441586
Ace17
Posté le 27-06-2003 à 11:50:05  profilanswer
 

Tu ne t'occupes pas de ce qu'il y a dans la mémoire! On s'en fiche! On cherche pas a savoir! Si tu veux accéder caractere par caractere il y a des fonctions d'acces mais a aucun moment on a besoin de savoir ce qu'il y a en mémoire ni comment c'est organisé.

n°441588
Ace17
Posté le 27-06-2003 à 11:51:00  profilanswer
 

Yoyo@ a écrit :


<string> en l'occurence, ca fait référence à la template et non pas au header comme d'hab?


 
Ben il existe un fichier "string" sans extension qui est en fait un header. Sauf que tout ce qu'il déclare est dans un namespace d'ou le besoin de faire un usign apres.

mood
Publicité
Posté le   profilanswer
 


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

  [VC++] Problème étrange !

 

Sujets relatifs
[FLASH] J'ai un petit problème de séquence ?[HTML/JS] Problème de Refresh
Problème avec JCreator ProProbleme avec if ( )
Probleme pour générer dynamiquement une expressionProblème avec list<int>
[VB]Problème caractères spéciaux [Resolu][HTML] Probleme d'impression
Problème de cookiesphp : Problème version? [ RESOLU ]
Plus de sujets relatifs à : [VC++] Problème étrange !


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