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 :

utiliser une DLL écrite en C


Sujet :

VB.NET

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Par défaut utiliser une DLL écrite en C
    Bonjour,

    J'ai suivi le tutoriel "Créer des dll en C compatibles avec VB 6" :
    http://rp.developpez.com/vb/tutoriels/dll/


    (je travaille sous Code::Blocks et Visual Basic 2008 express).
    Après avoir créé ma DLL en C, je cherche à l'appeler depuis mon programme en VB mais j'ai un message d'erreurs qui persiste malgré les nombreuses tentatives que j'ai fait depuis quelques jour. Le message d'erreur est le suivant :

    Une exception non gérée s'est produite dans votre application [...]
    Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
    Je précise que la fonction en C que je veux utiliser n'a pas de paramètres et qu'elle retourne un float (soit single en VB).

    Quelqu'un peut m'aider à résoudre ce problème?
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    VB6 n'est pas du tout la même chose que VB.Net.
    Il faut que tu regardes du côté de P/Invoke, ca a été souvent débattu sur ce forum, une recherche devrait t'aider.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Par défaut
    D'accord, grosse confusion de ma part (je débute).
    Je trouve sur le net en quoi consiste le P/Invoke, mais je ne trouve pas d'exemple qui correspondrait à mon cas en particulier (à savoir dll en C à utiliser en VB.net)??
    Merci

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Par défaut
    je vais regarder ça de près. merci

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut calling dll c,a partir de vb.net
    bonjour les douzes qui font 24
    Appeler une fonction c qui renvoie un float .
    Voici l'appel d'une fonction C :
    -qui renvoie un float.
    -qui recoit par adresse (byref en vb.net) un float et renvoie un float.
    -qui recoit une chaine (byref ) et renvoie une autre chaine...
    projet c win32 "ProjetWin32DllVbNet" :

    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
    28
    29
    30
     
    //fichier :exemple.c
    //fichier :exemple.def  vient apres ci-apres pour les symboles exportes(fonctions ou variables visible à l'xterieur de la dll) 
    #include <WINDOWS.H>
     
    		LPCSTR DisplayStringByVal(LPCSTR pszString)
    		{
    		  return "Hello Dll C  Anabase Les DixMille ";
    		}
     
    				void ReturnParamFloat(float* pFloat)
    		{
    			*pFloat = *pFloat + 5.5;
     
    		}
    		float fnFloat(void* )
    		{
    			float unFloat = 12.0;
    			unFloat = unFloat + 6.5;
    			return unFloat;
     
    		}
    //simple.def 
     
    LIBRARY	"ProjetWin32DllVbNet"
    DESCRIPTION 'Sample C DLL for use with .NET'
          EXPORTS
            DisplayStringByVal
            ReturnParamFloat
            fnFloat
    code vb.net projet winform:

    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
    28
    29
    30
    31
     
    Imports System.Runtime.InteropServices
    Public Class Form1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
           ' LA SUB CHAINE
            Dim Message As String = ""
            Message =DisplayStringByVal(Message)
            MessageBox.Show(Message)
     
           'LA SUB FLOAT
            Dim NumSingle1 As single = 3.0
            Call ReturnParamFloat(NumSingle1)
            MessageBox.Show(NumSingle1.toString)
     
            'LA FUNCTION FLOAT
            Dim NumSingle2 As single = 0.0
            NumSingle2= fnFloat()
            MessageBox.Show(NumSingle2.toString)
        End Sub
         <DllImport("ProjetWin32DllVbNet.dll", CallingConvention:=CallingConvention.Cdecl)> _
        Private Shared Function  DisplayStringByVal(ByRef Message As String) As string
        End Function
          <DllImport("ProjetWin32DllVbNet.dll", CallingConvention:=CallingConvention.Cdecl)> _
        Private Shared Sub ReturnParamFloat(ByRef nombreSingle As Single)
        End Sub
        <DllImport("ProjetWin32DllVbNet.dll", CallingConvention:=CallingConvention.Cdecl)> _
        Private Shared Function  fnFloat() As Single
        End Function
       End Class
    1/creer le projet Dll Win32 et generer la dll rojetWin32DllVbNet.dll
    2/creer le projet vb.net ,generer et envoyer dans deboguer l'exe dans le dossier debug du projet c.
    3/tester.
    bonne soiree.....................

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Par défaut
    Peux-tu mieux m'expliquer le 2è point

    creer le projet vb.net ,generer et envoyer dans deboguer l'exe dans le dossier debug du projet c
    ?

    Merci

  8. #8
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut dll c et chemin de fichier
    bonjour douze_12
    Tout simplement parce que une dll avec directive ImportDll doit se trouver dans le meme dossier que l'exe vb.net.
    Sinon le chemin de la dll doit etre inclus en plus de son nom dans la directive Import

    exemple code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ' exemple 1:la dll et l'exe vb.net sont dans le meme dossier. 
     <DllImport("ProjetWin32DllVbNet.dll", CallingConvention:=CallingConvention.Cdecl)> _
     
    'exemple 2: la dll et l'exe vb.net sont dans des dossiers differents.il faut ecrire dans le source vb.net le chemin de la dll.
     <DllImport("cheminFichierDll\ProjetWin32DllVbNet.dll", CallingConvention:=CallingConvention.Cdecl)> _
    Quand je dis generer et envoyer c'est pour quelqu'un d'averti.
    Dans vb.net tu fais
    Explorateur Sol.->Proprietes Projet->Onglet Debogguer->Chemin ...et tu choisis le dossier debug (de C) .
    L'exe vb.net sera ecrit dans ce dossier en meme temps que la dll C.
    Ceci fait qu'on est dans le cas 1 et donc on peut tester le projet vb.Net.


    bon code....

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Par défaut
    c'est bon ça marche!
    merci!!

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

Discussions similaires

  1. Utiliser une DLL écrite en C++ dans delphi
    Par totof41 dans le forum Langage
    Réponses: 3
    Dernier message: 07/05/2014, 08h39
  2. Utiliser une DLL écrite en C/C++ avec Java
    Par Beginner. dans le forum Général Java
    Réponses: 7
    Dernier message: 25/02/2012, 00h28
  3. Utiliser une dll écrite en C++/CLI
    Par scolyo dans le forum C#
    Réponses: 3
    Dernier message: 09/10/2008, 11h09
  4. Réponses: 6
    Dernier message: 21/06/2005, 21h45
  5. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19

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