Créer une Dll en VB 2005 Express

Signaler
Messages postés
6
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
8 juin 2008
-
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
-
Bonjour à toutes et tous,

Par manque de possibilité d'effectuer des calcul trigonométrique sur des RADIANS dans le logiciel de développement que j'utilise, j'ai créé sous VB 2005 EXPRESS une "routine"  qui me donne parfaitement les résultats escomptés.

Mon problème est de pouvoir en créer une DLL et l'utiliser dans mon logiciel de développement.

Ne désirant pas acquérir un logiciel de développement supplémentaire et compte tenu que le VB 2005 Express est gratuit (je passerai vraissemblablement en VB 2008 Express prochaînement) je l'ai utilisé pour créé cette routine.

Ma question est simple : qui peut m'aider à en créer une DLL qui devrait accepter en entrée QUATRE paramètres et me RENVOYER (les deux résultats du calcul) en SORTIE.

D'avance un grand merci à celles et ceux qui voudront bien m'aider et à bientôt.

Marc.

12 réponses

Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Salut,

Que je sache, il est impossible d'utiliser une DLL .NET à partir d'un langage qui n'est pas .NET. Pas de chance
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Hum.. je crois que j'ai parlé trop vite, il y a une propriété COM Visible pour les classes... renseigne toi la dessus, tu devrait facilement trouver...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Aucun besoin d'acheter un logiciel pour faire une DLL (une vraie), VC++ 2008 Express est autant gratuit que VB et autres interprétés.

Tuto de pose ici: http://www.cppfrance.com/code.aspx?ID=38359
Il faut bien tout installer comme indiqué dans le tuto (c'est pour version 2005 mais idem pour 2008).

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
8 juin 2008

Merci BruNews de ta réponse.

J'ai également la version C++ 2005 Express et n'ayant aucune connaissance en C++ j'ai eu énormément de difficultés dans l'approche de C++, je me suis tourné vers VB 2005 express, à tort peut être, ...

Quoi qu'il en soit, je suis prêt à désinstaller les Express 2005 pour passer aux 2008, mais avant de le faire, consentiras-tu à m'aider à amener cette DLL jusqu'à  à bon port.
 J'aurai peut être l'une ou l'autre question complètement loufoque, et je ne désire pas non plus à devenir un spécialiste en C++.

Merci de ta réponse et je te recontacterai dès que je suis prêt avec C++ 2008 Express en ayant tenu compte de ton Tuto.

A bientôt,

Marc
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Passe aux versions 2008 sans hésiter.

Pour ta DLL, faudrait voir ce qu'elle doit faire.
Entre CS et le boulot, les journées sont déjà bien remplies.
Tu peux t'inspirer de mes sources, celles sur vbfrance ne contiennent que des DLLs en C avec exemple d'utilisation depuis VB.

ciao...
BruNews, MVP VC++
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Re,

Je ne vous suis pas trop... Thonm dis qu'il a fait une DLL en VB.NET qu'il voudrait utiliser depuis un autre langage (pas .NET je suppose), et BruNews tu lui répond de la faire en VC++. Bah oui, bien sûr qu'il peut la faire en C++, mais justement il l'a fait en VB.NET et pas en C++, sinon il ne poserais pas la question.

Donc pour utiliser une DLL managé (quel que soit le langage) depuis un programme non managé (COM), suffit de faire comme c'est expliqué ici  :

http://msdn.microsoft.com/en-us/library/sd10k43k(VS.80).aspx
(Exposing .NET Framework Components to COM)

(Pour plus d'info, suffit de chercher "ComVisible" dans Google)
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Encore moi...

Alors j'ai un peu lu ces truc, et j'en viens à la conclusion qu'il suffit de mettre le paramètre <ComVisible(true)> devant ta fonction. Tu peux exposer tout type ou membre de ton assembly, ou même l'assemby tout entier.

<ComVisible(true)> _
Public Sub GetResult(ByVal Param1 As Integer, ByVal Param2 As Integer, ByVal Param3 As Integer, ByVal Param4 As Integer, ByRef Res1 As Integer, ByRef Res2 As Integer)
    Res1 = Param1 + Param2
    Res2 = Param3 + Param4
End Sub

La Fonction GetResult sera alors accessible par COM, comme tout autre API de Windows.
Je n'ai pas testé, je le ferai peut-être ce soir.
Messages postés
6
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
8 juin 2008

Bonsoir Kevin,

Je n'ai pas encore écrit de DLL mais simplement une "routine" qui m'a permis de vérifier si les formules, que j'envisage d'utiliser, dans mon outils de développement, répondent aux résultats attendus.
J'ai pu vérifier qu'elles sont correctes et je passe maintenant à l'étape suivante qui, comme je l'ai dit avant, serait d'utiliser ces formules dans une DLL, mais pour cette DLL je n'ai aucune idée comment dois-je procéder pour y arriver d'où ma demande sur le forum.

De plus ayant constater la nouvelle version Express 2008, j'ai tout désinstallé et intallé, pour le moment, C++ Express 2008, avec quelques petits problèmes de désinstallation de SQL Server, et si comme j'ai déjà pu un peu me rendre compte que VB Express est plus facile à "ingurgiter" que VC++, j'y reviendrai si je n'arrive pas à assimiler les "rudiments" de VC++ dont j'ai besoin pour arriver à mes fins.

Encore merci de tes réponses et peut-être à bientôt.

Marc.
Messages postés
6
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
8 juin 2008

Bonsoir BruNews,

J'ai tout désinstaller 2005 Express et installé C++ 2008. Des problèmes avec la désinstallation de SQL Server et je devrai peut être le réinstaller.

Ayant suivit le TUTO d'installation, quelques informations. Certains lien ne fonctionne plus, mais comme il était prévu pour 2005 je ne me suis préocupé que de la configuration.

1) Pour 2008 le répertoire de la Platform SDK est : \Program Files\Microsoft SDKs\Windows\v6.0A\ qui contient Bin, Include et Lib; j'ai donc pris, pour le point 1 du Tuto ces 3 répertoires.
2) Pour le point 2, je n'ai rien fait puisque le fichier corewin.vsprops (et non plus corewin_express.vsprops) contient bien les AdditionalDependencies; il contient même en plus : odbc32.lib odbccp32.lib.

Mais pour le point 3 qui ne contient que les 3 lignes :

 if("true" == window.external.FindSymbol("CONSOLE_TYPE_ONLY"))
 {
  WIN_APP.disabled = true;
  DLL_APP.disabled = true;
  LIB_APP.disabled = true;
 }

la ligne "WIN_APP_LABEL.disabled = true" étant manquante FAUT-IL également ajouter un double slach (//) pour les transformer en commentaire ?

Voilà pour la réinstallation. En se qui concerne ma DLL, pour les formules je crois que j'y arriverai sans trop de difficultés mais pour ce qui est d'en faire une DLL, je devrai chercher. J'ai déjà lu que cela peut se faire dans une class, mais est-ce la bonne marche à suivre ?

Je suis occuper d'analyser tes sources pour y trouver le cheminement de la solution. Ma Dll devrait accepter 4 paramètres en entrées et me renvoyer les 2 résultats de mes calculs. En fait mes calculs sont simplements une utilisation des formules trigonométriques pour les quels je sais déjà que je dois prévoir une "include" de la lib "Math".

Voilà où j'en suis pour le moment, je continue.

D'avance merci de ta réponse.

Marc.


 
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Si prob d'installation, demande en commentaire sur le tuto d'install car je ne te serai d'aucun secours, je bosse avec la version PRO et n'ai donc jamais utilisé l'Express. Va tranquille qu'elle fonctionne nickel, des tas de gens l'utilisent sur cppfrance.

Une fois SDK et tout ce qu'il faut de mis, utilise mes template pour construire ton projet de DLL:
TEMPLATES C/C++ POUR VS 2008
http://www.cppfrance.com/code.aspx?ID=44835
il y a un template marqué 'cDLL', il te configurera ton projet comme il faut.

Pour la suite, faudrait passer sur le forum cppfrance.

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
8 juin 2008

Encore merci de tes reponses et peut être à bientôt sur cppfrance.


Marc.
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Je n'ai pas encore écrit de DLL mais simplement une "routine" qui m'a
permis de vérifier si les formules, que j'envisage d'utiliser, dans mon
outils de développement, répondent aux résultats attendus.


J'ai pu
vérifier qu'elles sont correctes et je passe maintenant à l'étape
suivante qui, comme je l'ai dit avant, serait d'utiliser ces formules
dans une DLL, mais pour cette DLL je n'ai aucune idée comment dois-je
procéder pour y arriver d'où ma demande sur le forum.

Oui mais pouquoi refaire ta routine en C++ alors qu'elle fonctionne en VB?
Mais si tu veux te lancer dans le C++, libre à toi. D'ailleur les
performances seront certainement meilleures en C++, ce qui fera une
différence si tes routines prennent un temps considérable à s'exécuter.

Pour faire une DLL de ton projet, il n'y a rien à faire si ce n'est d'aller dans les propriétées de ton projet et de changer "Type d'application : Bibliothèque de classe" (Choix dans un ComboBox)
Ou si tu veux faire un nouveau projet: Nouveau projet > Bibliothèque de classe.

Il te suffisait donc de faire ça et d'ajouter l'attribut <ComVisible(True)> devant ta "routine" pour pouvoir y accéder depuis n'importe quel progamme non managé... en théorie, je n'ai toujours pas testé.

Mais je crois que tu n'as pas confirmé si tu voulais accéder à cette DLL depuis un langage managé ou non. Si oui, il n'y a absolument rien à faire, tu peux très bien accéder aux classes et routines d'un exe, et évidement l'attribut ComVisible n'est pas utile.