Création d'une DLL en vb.net [Résolu]

Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 30 mai 2018 à 17:17 - Dernière réponse : Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

13 réponses

NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 30 mai 2018 à 18:10
0
Merci
DLL est un terme générique, tu veux faire une :
- DLL Native Win32/64
- DLL ActiveX
- DLL COM
- DLL .NET
- ...
?
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 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
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 10 août 2018 Dernière intervention - 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.
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 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.
Commenter la réponse de NHenry
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 30 mai 2018 à 20:58
0
Merci
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
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 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
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 30 mai 2018 à 21:40
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 30 mai 2018 à 21:41
Je regarde, merci
Commenter la réponse de Whismeril
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 30 mai 2018 à 22:34
0
Merci
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.
Commenter la réponse de Bilou47190
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 30 mai 2018 à 23:12
0
Merci
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
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 30 mai 2018 à 23:19
Ouah, super cool, je vas me tester tout ceci, grand merci.
Commenter la réponse de Whismeril
Bilou47190 11 Messages postés mardi 3 mars 2009Date d'inscription 31 mai 2018 Dernière intervention - 31 mai 2018 à 20:23
0
Merci
Salut,
C'est tout bon.
Merci beaucoup
Whismeril 11965 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 16 août 2018 Dernière intervention - 31 mai 2018 à 20:31
Commenter la réponse de Bilou47190

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.