Création d'une DLL en vb.net

Résolu
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
- 30 mai 2018 à 17:17
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
- 31 mai 2018 à 20:31
Bonjour,
Je ne sais pas comment créer une DLL sous visual studio pro 2017.
Quel choix faire quand on fait nouveau projet ?
Que déclarer pour que ce soit une DLL ?
Bilou

5 réponses

NHenry
Messages postés
14925
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
162
30 mai 2018 à 18:10
DLL est un terme générique, tu veux faire une :
- DLL Native Win32/64
- DLL ActiveX
- DLL COM
- DLL .NET
- ...
?
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 18:18
Une dll native win32-64, dans mon programme, j'ai une procédure qui peut me servir pour d'autres programmes, je voudrais en faire une dll pour faire un call à cette proc. Ca m'évite de ré-écrire la même chose à chaque fois
0
NHenry
Messages postés
14925
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
162
30 mai 2018 à 19:11
Si c'est pour l'utiliser dans d'autres programmes .NET, tu peux directement faire une DLL .NET (regardes dans les types de projets).
Pour faire une DLL Native Win32/64, il faudra passer pas C++ et tu sera en-dehors du framework.
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 19:39
Zut, connais pas C++, j'avais trouvé une fois sur l'ancien site une dll en VB.NET, on doit pouvoir en faire encore.
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
30 mai 2018 à 20:58
Bonsoir,

tu codes en VB.Net, utiliser une dll native en .Net est assez chiant, du coup, vu que tu poses la question, je suis près à parier que tu n'en a jamais utilisé.

Tu veux t'en resservir dans tes prochains programmes (en .Net je suppose), du coup en faire une native est contre productif.

Donc, comme l'a écrit NHenri, il te faut faire une dll .Net.
Pour cela, il suffit de mettre tout tes codes réutilisables dans un projet "Bibliothèque de Classes".
Tu ajoutes ce projet à toutes tes solutions.
Tu référence ce projet dans chaque projet de la solution qui en a besoin.
Pour chaque classe qui le nécessite, tu importe le namespace.
En fait tu fait exactement comme quand tu utilises n'importe quelle dll du framework qui ne sont pas incluses automatiquement dans un nouveau projet.

Je fais cela très souvent
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 21:07
Ok, je vais tester. Le namespace, c'est une variable ou un mot clé ? Genre Imports system.xxxxx.
Je vous tiens au courant
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
30 mai 2018 à 21:40
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 21:41
Je regarde, merci
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 22:34
J'ai loupé un truc ?

Mon projet DLL :

Public Class Dll_Perso
Public Function Mon_Test(Msg As String) As String
MsgBox(Msg)
Return ("ok")
End Function
End Class

La génération est ok, j'ai bien ma DLL

Mon projet pour tester :
Le module :
Imports Dll_Perso
Module Module1
Declare Function Mon_Test Lib "Dll_Perso" (ByVal toto As String)
End Module

Le form :
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim tst As String
tst = Mon_Test("eeee")
End Sub
End Class

Et voila mon erreur :

System.Runtime.InteropServices.MarshalDirectiveException :
'Restriction PInvoke : impossible de retourner des variants.'

Exception levée : 'System.Runtime.InteropServices.MarshalDirectiveException' dans WindowsApp1.exe
Une exception non gérée du type 'System.Runtime.InteropServices.MarshalDirectiveException' s'est produite dans WindowsApp1.exe
Restriction PInvoke : impossible de retourner des variants.
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
30 mai 2018 à 23:12
Au temps pour moi, tu t'es déjà pris la tête avec des dll natives.

Mais c'est pas ça que je te propose








Code de ClassePerso.Vb
Imports System.Windows.Forms

Public Class ClassePerso
    Public Function Mon_Test(Msg As String) As String
        MessageBox.Show(Msg) 'MsgBox c'est du VB6, pas du VB.Net, il vaut mieux éviter de mélanger
        Return "ok"
    End Function

End Class


Code de Form1
Imports ExempleBibliotheque

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim maClassePerso As New ClassePerso()
        maClassePerso.Mon_Test("Coucou")
    End Sub
End Class


Tu peux aussi utiliser une méthode partagée
Imports System.Windows.Forms

Public Class ClassePerso
    Public Function Mon_Test(Msg As String) As String
        MessageBox.Show(Msg) 'MsgBox c'est du VB6, pas du VB.Net, il vaut mieux éviter de mélanger
        Return "ok"
    End Function

    Public Shared Function Mon_Test2(Msg As String) As String
        MessageBox.Show(Msg) 'MsgBox c'est du VB6, pas du VB.Net, il vaut mieux éviter de mélanger
        Return "ok"
    End Function

End Class


Imports ExempleBibliotheque

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim maClassePerso As New ClassePerso()
        maClassePerso.Mon_Test("Coucou")

        ClassePerso.Mon_Test2("Coucou2")
    End Sub
End Class
0
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
30 mai 2018 à 23:19
Ouah, super cool, je vas me tester tout ceci, grand merci.
0

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

Posez votre question
Bilou47190
Messages postés
24
Date d'inscription
mardi 3 mars 2009
Statut
Membre
Dernière intervention
20 décembre 2018
3
31 mai 2018 à 20:23
Salut,
C'est tout bon.
Merci beaucoup
0
Whismeril
Messages postés
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
31 mai 2018 à 20:31
0