Code::Block DLL pour l'utiliser dans VB [Résolu]

runo 26 Messages postés mercredi 5 octobre 2005Date d'inscription 15 avril 2011 Dernière intervention - 28 janv. 2010 à 13:44 - Dernière réponse : vahanar 11 Messages postés dimanche 23 mars 2008Date d'inscription 9 avril 2015 Dernière intervention
- 9 avril 2015 à 15:10
Bonjour,

je souhaite créer une DLL en C (ou C++) avec Code::Block que j'utiliserai ensuite sous VB (en fait excel 2003)...
Je crée donc mon projet DLL sous Code::Blocks et mon code dll.c :
[b]#define DllExport __declspec(dllexport)
#include "windows.h"

int DllExport _stdcall sum(int entier1, int entier2) {
return entier1 + entier2;
}

int DllExport _stdcall mul(int entier1, int entier2) {
return entier1 * entier2;

Je build mon projet et j'obtiens donc un fichier maDLL.dll et maDLL.def générés automatiquement :
EXPORTS
mul@8 @1
sum@8 @2

Ensuite, je mets mon .dll dans le system32 de ma machine et lance mon vb :
Private Declare Function sum Lib "maDLL.dll" (ByVal Number1 As Long, ByVal Number2 As Long) As Long
Private Declare Function mul Lib "maDLL.dll" (ByVal Number1 As Long, ByVal Number2 As Long) As Long

Public Sub test()
Dim a As Long
Dim b As Long
a = 2
b = 10
Debug.Print (sum(a, b))
Debug.Print (mul(a, b))
End Sub

Sauf qu'au moment d'appeler mes fonctions sum et num, j'ai une erreur me disant "Erreur d'execution 453" point d'entrée DLL introuvable...

Je pense que mes exports se sont mal passés mais étant donné que le fichier .def est bien créé je ne vois pas trop pourquoi ...

J'ai quand même réussi à créer ma DLL avec Visual C++ Express 2008 (version 30 jours) et l'utiliser dans mon projet VB (avec le mm code que ci dessous). Je precise qu'il a qd même fallu que je force le linker à utiliser en module d'entrée mon fichier .def (Projet/Propriétés/Linker/Module d'entrée/ pour pouvoir utiliser ma DLL avec VB).
Mais J'aimerai qd même l'utiliser avec code::block.

Merci pour ceux qui sauront m'aider.
Afficher la suite 

8 réponses

Répondre au sujet
runo 26 Messages postés mercredi 5 octobre 2005Date d'inscription 15 avril 2011 Dernière intervention - 15 avril 2011 à 00:44
+1
Utile
Ma solution a ete d'abandonner code block et de rester sur visual c++. A l'epoque ca marchait plutot bien :-)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de runo
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 28 janv. 2010 à 15:45
0
Utile
"version 30 jours" ???
Les version Express sont libres d'emploi, donc illimitées.

Il y aurait une valeur ajoutée à faire dans l'exotique ?
Il est certain qu'on ne fera pas mieux pour du code Windows qu'avec des compilos MS.
Je pense qu'il doit en être de même avec le mode Linux.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 28 janv. 2010 à 19:09
0
Utile
Tu dois ajouter --add-stdcall-alias aux paramètres de gcc.
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
uaip 1473 Messages postés mardi 20 février 2007Date d'inscription 7 février 2011 Dernière intervention - 29 janv. 2010 à 00:38
0
Utile
Salut,
Ton prototype est :
int DllExport _stdcall sum(int entier1, int entier2);


Et qu'obtiens-tu en changeant par ? :
DllExport UINT _stdcall sum(int entier1, int entier2);


Personnellement, je n'ai modifié aucun paramètre du compilo et ça fonctionne. Ou alors quelque chose m'aurait échappé.

Cordialement, uaip.
Commenter la réponse de uaip
runo 26 Messages postés mercredi 5 octobre 2005Date d'inscription 15 avril 2011 Dernière intervention - 29 janv. 2010 à 09:14
0
Utile
Merci pour vos réponses.

Pour répondre à Brunews : on ne choisis pas toujours les outils qu'on utilise ... merci quand même.

Pour répondre à ghuysmans99 :
Je ne vois pas où mettre cette option dans code::blocks ? dans "Other options" de l'onglet Compiler settings ?

Pour répondre à uaip : j'ai redéclaré mes prototypes comme suggéré mais j'ai tjs le mm probleme... Pour le compilateur, j'utilise celui installé par code::blocks :
C compiler : mingw32-gcc.exe
C++ compiler : mingw32-g++.exe
Linker dynamic lib : mingw32-g++.exe
As tu des compiler flags d'activés ?
Aurais tu à tout hasard un mini projet que je compare le soptions avec ce que j'ai ?
renepie@gmail.com
Commenter la réponse de runo
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 29 janv. 2010 à 18:19
0
Utile
Tu dois probablement ajouter ce paramètre dans la partie que tu as citée, je n'utilise que gcc via la ligne de commande.
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
krapo13 1 Messages postés dimanche 12 juillet 2009Date d'inscription 14 avril 2011 Dernière intervention - 14 avril 2011 à 18:15
0
Utile
J'arrive un peu après la bataille...
As tu trouvé une solution, j'ai exactement le même problème ??
Commenter la réponse de krapo13
vahanar 11 Messages postés dimanche 23 mars 2008Date d'inscription 9 avril 2015 Dernière intervention - 9 avril 2015 à 15:10
0
Utile
je déterre le sujet, mais j'ai identiquement le même problème, si qq passe par ici avec une solution elle est bienvenue, merci
Commenter la réponse de vahanar

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.