cs_machmacha
Messages postés97Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention28 mai 2010
-
30 mars 2007 à 19:55
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 2013
-
23 févr. 2009 à 17:49
salut tous,
j'ai entendu tres souvent sur les fichier Dll et son importance dans la programmation soit en Langage C++ ou Vb.net ou autre, mais je ne c'est pas vraiment son role, et comment les creer et quoi definir dedans :roll: .
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 30 mars 2007 à 23:15
salut
et google, ne trouve rien ? Dynamic Link Library !
Pour infos, en vb6, les dlls sont fait à partier de Module de classe.
C'est (en gros) un objet, tu crées une instance de celui-ci, et tu as accés à ses propriétés, méthodes.
Les méthodes public de la classe seront donc accessibles, quand ce sera compilé par vb en tant que Dll, par n'importe quel programme, si celui instancie ta dll.
(ex simple, User32 est une dll, et tu as accès a tout un tas de fonctions, style AnimateWindow, EnableWindow, etc..)
Pour des exemples, télécharge des sources avec des Modules de classes.
Ex de ce que tu peux y trouver avec une de mes classes (sur les actions de la bourse) :
Option Explicit
Private mcolPlacements As New Collection
Property Get LastValueAction() As String
Dim NewValue As New clsDatas
If sContenu = vbNullString Then
LastValueAction = CotationsValues(Me.CotationsNumber)
Else
LastValueAction = NewValue.ProcessingDatas(sContenu)
Set NewValue = Nothing
End If
End Property
Public Sub Delete(ByVal Index As Variant)
mcolPlacements.Remove Index
End Sub
Property Get NameAction() As String
NameAction = Config.ReadIniString("ACTION", "Nom")
End Property
Property Let NameAction(new_mNameAction As
String)
Call Config.WriteIni("ACTION", "Nom", new_mNameAction)
End Property
Property Get CotationsNumber() As Long
CotationsNumber = UBound(CotationsValues) - 1
End Property
' Moyenne de
l'action, par rapport aux valeurs enregistrées localement
' (ne reflêtera pas forcémment la réalité, si le suivi est pris en
cours de route)
Property Get AverageAction() As Double
Dim i As Integer
Dim temp As Double: temp = 0
For i = LBound(CotationsValues) To Me.CotationsNumber
temp = temp + MyCDbl(CotationsValues(i))
Next i
AverageAction = Format(temp / (UBound(CotationsValues) + 1), "#0.00")
End Property
' pourcentage de l'avant dernière donnée à la
dernière
Property Get LastValueEvolutionInPercent() As
String
If Me.CotationsNumber < 2 Then
LastValueEvolutionInPercent = "ND"
Else
LastValueEvolutionInPercent = CStr(Percent(MyCDbl(CotationsValues(Me.CotationsNumber - 1)),
MyCDbl(CotationsValues(Me.CotationsNumber))))
End If
End Property
' pourcentage de la
1ere à la dernière donnée
Property Get FirstValueEvolutionInPercent() As
String
If Me.CotationsNumber < 2 Then
FirstValueEvolutionInPercent = "ND"
Else
FirstValueEvolutionInPercent = CStr(Percent(MyCDbl(CotationsValues(LBound(CotationsValues) + 1)),
MyCDbl(CotationsValues(Me.CotationsNumber))))
End If
End Property
' date de
téléchargement de la dernière action
Property Get LastDate() As String
LastDate = CotationsDates(Me.CotationsNumber)
End Property
' Cotation de
l'action la plus Basse
Property Get LowerAction() As String
Dim i As Integer
LowerAction = CotationsValues(LBound(CotationsValues) + 1)
For i = LBound(CotationsValues) + 1 To Me.CotationsNumber
If Val(CotationsValues(i)) < Val(LowerAction) Then LowerAction =
CotationsValues(i)
Next i
End Property
' Cotation de l'action la plus Haute
Property Get HigherAction() As String
Dim i As Integer
HigherAction = CotationsValues(LBound(CotationsValues))
For i = LBound(CotationsValues) To Me.CotationsNumber
If Val(CotationsValues(i)) > Val(HigherAction) Then HigherAction =
CotationsValues(i)
Next i
End Property
Public Function Add(ByVal Name As String, ByVal PartNumber As String) As clsPlacement
Dim NewPlacement As New clsPlacement
With NewPlacement
.ID = Name
.NamePlacement = Name
.PlacementValue = PartNumber
mcolPlacements.Add NewPlacement, .ID
End With
Set Add = NewPlacement
End Function
Public Function Count() As Long
Count = mcolPlacements.Count
End Function
Public Function Item(ByVal Index As Variant) As clsPlacement
Set Item = mcolPlacements.Item(Index)
End Function
' NewEnum doit
renvoyer l'interface IUnknown de
' l'énumérateur
d'une collection.
' dans le Menu Outils,
Attibut de procédure, il faut mettre dans les propriétés
' avancées de cette procédure lID à -4 (moins 4) et cocher
~Masquer ce membre~
Public Function NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = mcolPlacements.[_NewEnum]
End Function
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 31 mars 2007 à 08:14
mortalino >> tu confond dll et activeX apparement : une dll est une bibliothèque de fonction, comme l'est user32, elle est bien souvent codée en C, avec des définitions d'export des fonctions. Tu les appelle non pas en créant une instance de classe, mais en les déclarant dans ton code vb (la fameuse instruction Declare) : toutes les API Windows sont codées dans de "vraies" dll.
Les dl activeX, bien que leur extension soit en .dll ne sont pas de véritable dll, ce serait plutôt des bibliothèques d'objets, elles devraient avoir l'extension ocx, ca éviterait les embrouilles entre les termes ! Elles nécéssitent d'être enregistrées dans le registre afin que le système puisse les retrouver, et connaître les objets qu'elles hébergent. Pour utiliser une de leur fonction, il faut créer une instance de la classe, ce qui rend les choses plus compliquées (légérement), et surtout, il y a tout un protocole de communication qui se met en place entre le prog et l'ocx, ce qui rend les chose bien moins rapide qu'un appel à une fonction d'une vraie dll ! Elle sont bien souvent codées en VB car VB apporte la rapidité de développement par rapport au C++ (c'est fastidieux de faire un ocx en C++), et surtout, un activeX est bridé non plus par le langage (enfin, très peu) mais surtout par le protocole de communication entre le programme et l'activeX (il me semble que c'est COM, non ?).
Voilou.
En gros, une dll ca permet d'avoir des bouts de code réutilisable entre plusieurs projets, ce qui augmente la rapidité de développement (une fois qu'un bout de code est testé et qu'on est sûr qu'il marche, on le mets dans une dll, et on le rappelle dans les autres projets), ca permet d'alleger un programme (par exemple, tout mes projets professionnels sont constitué d'un tout petit exe de 32 Ko qui ne fait des appels qu'à des dll, en moyenne une quinzaine => chargement très rapide, occupation mémoire moindre, et surtout, mise à jour du programme simplifiée : je ne mets à jour que les dll qui en ont besoin !). Enfin bref, je pense personnellement qu'une dll ca apporte beaucoup si on doit travailler sur un gros projet ou qu'on doit faire plusieurs projets qui doivent avoir des parties en commun.
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 23 févr. 2009 à 17:30
Bonjour Darksidious
Je voudrais savoir quel seraient les VB capables de creer des vrais DLL comme le C
Je sais déja que le VB6 n'en est pas capable, j'avais lu qu'un logiciel pouvait modifier le linker ou un truc comme ça, mais je n'en ai pas trouvé plus.
J'ai aussi VB 2003 PRO, en est t'il capable ???
Ou sinon lequel 2005, 2008 version express, pro, standard.
Et surtout si quelqu'un aurait déja créé ce genre de DLL standard avec un VB
Car je lis tout et son contraire sur internet et je suis vraiment perdu.
J'ai acheté le VB2003 PRO pour faire des DLL, et j'apprend que l'on ne peut creer que des bibliotheques de classes et non des DLL, j'suis dégouté
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 23 févr. 2009 à 17:37
Salut,
VB 2003 ne gère pas le langage VB, mais le langage VB.NET : rien à voir !
Déjà qu'avec VB6, on ne pouvait pas faire de "vraies" dll (entends par là des bibliothèques de fonctions), alors je te laisse imaginer avec VB.NET qui est encore plus orienté objet...
Non à ma connaissance, il n'est pas possible de faire de "vraies" dll en VB, il faut passer par du C (pas extrêmement compliqué, et un peu plus rapide que du VB6 compilé). Cependant, comme tu peux le voir, cette discussion date de presque 2 ans, et je suis passé à bien autre chose depuis : je fais encore du VB6, mais je fais surtout du JAVA, qui n'a rien à voir avec VB6, et je m'éclatte bien plus avec JAVA qu'avec ce langage made in cro$oft qui a eu un temps de gloire avant que cro$oft ait jugé que pour ce faire plus de pognon encore il fallait sortir une version incompatible afin qu'un max d'entreprise rachète un Visual Studio... pas bête hein ? Et bien moi en tout cas, ca m'a dégoûté du langage VB, et surtout, de microsoft !
______________________________________
DarK Sidious
cs_andrebernard
Messages postés404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 23 févr. 2009 à 17:49
Je suis content de te reparler Dark
Tu as entierement raison.
J'ai exactement le meme degout que toi
J'ai trouvé ça completement dingue qu'il se permette de rompre completement les ponts entre VB et VB.NET
J'ai essayé de faire du VB 2003, mais j'ai rien compris, ils disent que c'est plus simple, et bah dis donc, je ne sais pas ce qu'ils appellent la simplicité.
Le probleme c'est que je n'ai jamais codé en C, et que Visual C++ pour commencer, c'est quand meme pas aussi intuitif que VB6.
J'ai essayé et rien que pour commencer, j'ai mis un temps fou, alors ça m'a un peu dégouté
Donc pour les DLL standards, y'a que le C
Bon bah decidement, j'suis pas pret de pouvoir en faire