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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.....................

+ 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