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 :
	Citation:
	
		
		
			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.
	 
	
	
	
		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:
	
| 12
 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:
	
| 12
 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 :ProjetWin32DllVbNet.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.....................
	 
	
	
	
		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:
	
| 12
 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....