cs_jon26
Messages postés11Date d'inscriptionmercredi 21 mai 2003StatutMembreDernière intervention 1 mars 2004 22 févr. 2004 à 01:48
Merci beaucoup pour ta réponse, mais j'ai essayé et il me dit qu'il ne trouve pas le point d'entrée de la fonction dans le dll.
int __stdcall essai4A(int *a, int *b)
Ces fixhiers def, je les introduits comment dans mon projet?
Il faut créer quoi comme type de workspace pour faire ce genre de dll à utiliser dans vb, ou bien que faut-il changer dans les settings du projet?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 22 févr. 2004 à 02:01
New project
win32 DLL et VIDE !!! no headers precomp ou autres bidules.
Mets de suite en release.
Creer un cpp du meme nom que proj.
Aussi un fichier DEF meme nom que proj.
Tu mets ton DllMain dans cpp et le reste comme vu plus haut.
cs_jon26
Messages postés11Date d'inscriptionmercredi 21 mai 2003StatutMembreDernière intervention 1 mars 2004 22 févr. 2004 à 03:13
j'ai fait exactement comme tu as dit. Malgré tout, vb me dit que les conventions ne sont pas bonnes.
Tout ce que je veux, c'est passer deux entiers en paramètres. Je dois faire un pointeur (int *a), ou simplement le passage de l'entier (int a). De tte façon dans les deux cas, il refuse d'accepter ça comme un (a as long) en vb.
C'est fou que ce soit si dur de passer des parmètres, des simples entiers.
Merci en tout cas pour ton aide...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jon26
Messages postés11Date d'inscriptionmercredi 21 mai 2003StatutMembreDernière intervention 1 mars 2004 24 févr. 2004 à 00:16
Salut Brunews,
Merci pour ton aide et ce projet que tu as fait. Le fichier sln crée une erreur et m'ouvre Microsoft Visual Developper. J'aurais aimé avoir le tout dans Microsoft VC++, mais c'est déjà très chouette. J'ai pu voir chacun de tes fichiers séparément, et j'ai essayé de reporter ce que tu as fait sur mon code, et même de compiler ta dll et appeler tes fonctions depuis mon code vb.
Les mêmes erreurs se produisent. Alors, ce que j'ai fait, c'est mettre dans un .zip un projet complet vc++ avec ma fonction exportée selon deux méthode (export, et stdcall) et le code vb qui l'appelle.
Lorsque j'appelle la fonctione xportée avec "extern "C" __declspec(dllexport)", l'erreur dans vb est "Bad dll calling convention"
Lorsque j'appelle la fonctione exportée avec "__stdcall", l'erreur dans vb est "Can't find dll entry point"
Peux-tu jeter un oeil à mon zip qui est très simple. je dois oublier un bête truc qui me prend déjà une semaine. C'est pas logique tout ça. Avec ton expérience, tu verras le probkème directement. Voici mon .zip :
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 févr. 2004 à 00:44
J'ai pris ton zip et enleve ta source.
C'est quoi tout ce bordel d'include qu'il y a en haut du cpp ???
Je reprends ce qu j'avais mis plus haut:
New project
win32 DLL et VIDE !!! no headers precomp ou autres bidules.
ME SEMBLE POURTANT TRES CLAIR, non ? Et pourtant 1ere chose que je trouve, stdafx... c'est pas venu tout seul.
VIDE, VIDE !!!
Y a pourtant des options quand tu fais un new proj, faut pas tout ce qu'il y a par defaut.
Ou est le fichier DEF pour export des fonctions SANS decoration des noms de fonction ???
Creer un cpp du meme nom que proj.
Aussi un fichier DEF meme nom que proj.
2 lignes qui etaient SANS ambiguite.
Recommence en faisant EXACT ce que j'ai dit.
CPP ne doit avoir que <windows.h> en include !!!
long __stdcall essai4B(long a, long b)
Celle ci est la bonne, manque seulement que son nom soit en export dans un DEF.
Une derniere: ne pas se servir des sources comme d'un FTP, ouvre t'en un sur FREE ou autre, c'est gratos.
cs_jon26
Messages postés11Date d'inscriptionmercredi 21 mai 2003StatutMembreDernière intervention 1 mars 2004 25 févr. 2004 à 18:15
Salut, tout d'abord merci beaucoup pour le temps que tu as passé à m'expliquer tout ça. Je viens de comprendre mon imbécilité. J'ai bêtement copié ton fichier def sans réfléchir, ce sont des noms de fonction. Nom d'une pipe, mais alors, ça va marcher!!! Je dois mettre le nom de mes fonctions et pas des tiennes... Faut dire qu'on voyait pas tout de suite que c'étaient des noms de fonctions ;) Bon j'essaye de remettre un peu de faute sur toi, mais elle ne vient que de moi la faute.
A propos du projet pas vide, je sais bien, j'avais fait à la lettre ce que tu m'avais dit, mais ça ne marchait pas, alors j'ai fait un nouveau projet avec du défaut pour réessayer, et désespéré je t'ai envoyé celui-là, dans la tourmente.
Tu es génial, tes infos étaient suffisantes, et moi pas assez attentif ;) Merci beaucoup
P.S. pour les sources, bien compris, je ne le ferai plus
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 28 avril 2004 à 10:41
'jour tout le monde,
Moi aussi je suis en train de créer une DLL visible sous VB.
Pour toutes les choses décrites dans ce topic, je n'ai pas de problème. Cependant j'ai quelques question qui touchent à ce même sujet.
Est-il possible de faire une classe dans la DLL C qui puisse être récupérer sous VB ? (lorsque l'on fait une DLL sous VB on peut intégrer autant de classes qu'on veut, les rendre visible ou non pour l'appli client) .
J'ai entendu dire que les DLL créées par VB sont des DLL ActiveX, dois-je (et puis-je) créer un tel fichier avec VC6 ?
Est-il possible de créer une DLL en C qui puisse être directement liée à un projet VB avec la commande
"Projet > Références ..." ?
voila, j'espère avoir une réponse de BruNews qui a quand même l'air d'être un grand spécialiste.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 avril 2004 à 11:17
Bien entendu qu'avec VC++ on peut creer de l'ActiveX et tout ce qui est win32 en general.
Je suis radicalement contre ActiveX, quel interet ?
Si on fait une dll C pour VB c'est pour speeder VB alors nenni interfaces COM et toutes autres lourdeurs, VITESSE !!!
Un ActiveX doit etre enregistre pour avoir Proj->References. T'en as pas marre des ennuis d'install de VB dus a cela ? Une dll C pure API se pose dans dossier de exe et tout va bon, pas de conflit de version etc...
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 28 avril 2004 à 11:36
Merci pour cette réponse rapide BruNews.
En effet si la perte de vitesse en AciveX est importante, ce n'est pas la bonne solution. En effet j'ai décidé d'utiliser une DLL C pour des questions de performances (certains calculs ont pris plusieurs jours codés en VB).
Toutefois j'avais un modèle objet très complet et j'aurais aimé le gardé plutot que passer en fonctionnel. De plus les classes me permettaient de sécuriser l'accès aux données, ce que les structures ne font pas.
Mais, en gros, ton conseil c'est de faire toute ma DLL en procédural. Il faudra donc que je crée un module VB avec bien sûr tout les Declare mais aussi la "re-"définition des structures.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 nov. 2004 à 22:50
D'abord prends l'habitude de toujours bosser en RELEASE et non debug.
C'est quoi une 'librairie .h' ??? du code a passer en dll doit se trouver dans un .c ou .cpp pour qu'il y ait qlqchose a compiler.
/******************************************************/
/* Fonctions pour le calcul de la régression linéaire */
/* par la méthode des moindres carré */
/******************************************************/