IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

dll visual C++ dans visual basic


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut dll visual C++ dans visual basic
    bonjour tout le monde,

    j'ai un E-NO-RME problème et j'espère que vous pourrez m'aider.

    Voilà, j'essaie de creer une DLL avec visual c++ pour pouvoir l'utiliser sur visual basic. Seulement j'ai une erreur lors de l'exécution de mon programme visual basic.
    J'ai commencé par faire un .h et .cpp avec visual c++ comme ceci :

    voilà pour mon .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // fonctionsJPEG.h
     
    namespace fonctionsJPEG
    {
        class mesFonctionsJPEG
        {
        public:
            // fonction qui ajoute 20 à chaque pixel sauf s'il est supérieur a 234
            static __declspec(dllexport) int addVingt(int);
        };
    }
    et mon .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "fonctionsJPEG.h"
     
    #include <stdexcept>
     
    using namespace std;
     
    namespace fonctionsJPEG
    {
        int mesFonctionsJPEG::addVingt(int a)
        {
    		return a+20;
        }
    }
    Ensuite j'ai fais "générer la solution" et apparemment il m'a bien créé le .dll dans le dossier "debug" de mon projet.

    Puis j'ai créé un nouveau projet avec visual basic pour utiliser cette dll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Public Class Form1
     
        Public Declare Function addVingt Lib "jpegDLL.dll" (ByVal lala As Integer) As Integer
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim monImage As Bitmap
            Dim monEntier As Integer
            Dim monTableau As ArrayList = New ArrayList
     
            monImage = New Bitmap("C:\Users\Thomas\Downloads\projetCPPVB\projetJPEG\projetJPEG\monJPEG.jpg")
     
            For i = 0 To monImage.Width - 1
                For j = 0 To monImage.Height - 1
                    monTableau.Add(monImage.GetPixel(i, j).R)
                    monTableau.Add(monImage.GetPixel(i, j).G)
                    monTableau.Add(monImage.GetPixel(i, j).B)
                Next
            Next
     
            monEntier = monTableau(0)
            MsgBox(monEntier)
            addVingt(monEntier)
            MsgBox(monEntier)
     
        End Sub
     
    End Class
    j'ai essayé en copiant le .dll crée précédemment dans mon répertoire du projet vb.

    je ne sais trop quoi faire

    merci d'avance si vous pouvez m'aider et si vous avez besoin de plus de précision je suis tout ouïe

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Euh ... A aucun moment, tu n'expliques le problème que tu rencontres.
    "j'ai une erreur d'exécution" n'est pas une explication; nature du message d'erreur ?.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Je pense, si j'ai bien compris, qu'il n'arrive pas a accédé à la DLL.
    C'est une dllNotFoundException :

    Impossible de charger la DLL 'jpegDLL.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)
    Mais je ne sais pas d'où viens mon erreur

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par paladice Voir le message
    Je pense, si j'ai bien compris, qu'il n'arrive pas a accédé à la DLL.
    C'est une dllNotFoundException :

    Impossible de charger la DLL 'jpegDLL.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)

    Mais je ne sais pas d'où viens mon erreur
    Ok. C'est déjà plus clair.

    Donc, déjà copie ta DLL dans le répertoire Debug du projet client (du projet VB).Sinon, ton consommateur (ton projet VB) n'a aucun moyen de savoir où se trouve la DLL en question (puisqu'il n'y a pas de notion de référencement d'assembly contrairement à un projet managé).

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Merci de ta réponse, je ne savais pas qu'il y a avait un dossier debug dans les dossiers de projet vb honte sur moi.

    Maintenant ça fais une exception de type "EntrypointNotFoundException" :
    Impossible de trouver le point d'entrée 'addVingt' dans la DLL 'jpegDLL.dll'.
    Ça te dis quelque chose ?

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Oui, la déclaration de la fonction dans le projet C est mauvaise.

    Tu ne peux utiliser que des fonctions, pas des méthodes de classes.

    Or, là tu déclares :

    - une méthode dans une classe.
    - et un namespace à l'implémentation.

    Vire tout cela, je pense que cela ira mieux.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    merci pour ton aide et d'avoir répondu si rapidement je vais essayer de modifier tout ça

    edit : ça marche pour ceux qui ont également le problème voici mon code :

    .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <iostream>
    using namespace std;
     
    __declspec (dllexport) int __stdcall ajoutVingt( int monVector)
    {
    	return monVector + 20;
    }
    .def :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LIBRARY jpegDLL
    EXPORTS
    	ajoutVingt @1
    je génère le .dll

    le .vb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Class Form1
     
        Public Declare Function ajoutVingt Lib "jpegDLL.dll" Alias "?ajoutVingt@@YGHH@Z" (ByVal lala As Integer) As Integer
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim monImage As Bitmap
            Dim res As Integer
            Dim monTableau As ArrayList = New ArrayList
     
            monImage = New Bitmap("C:\Users\Thomas\Downloads\projetCPPVB\projetJPEG\projetJPEG\monJPEG.jpg")
     
            For i = 0 To monImage.Width - 1
                For j = 0 To monImage.Height - 1
                    monTableau.Add(monImage.GetPixel(i, j).R)
                    monTableau.Add(monImage.GetPixel(i, j).G)
                    monTableau.Add(monImage.GetPixel(i, j).B)
                Next
            Next
     
            MsgBox(monTableau(0))
            res = ajoutVingt(monTableau(0))
            MsgBox(res)
     
        End Sub
     
    End Class

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Parfait.

    Pense donc à mettre le tag à l'aide du bouton ad-hoc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Visual C++ dans Visual Studio .net 2005 beta 2
    Par T0xF0x dans le forum MFC
    Réponses: 19
    Dernier message: 09/01/2006, 02h09
  2. Les onglets dans Visual Basic
    Par kilhom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2005, 19h33
  3. Intégration d'un SDK dans Visual Basic
    Par <-NicO-> dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/02/2005, 22h53
  4. Comment utiliser Opengl dans Visual Basic 6
    Par fun31 dans le forum OpenGL
    Réponses: 1
    Dernier message: 03/12/2004, 10h17
  5. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo