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

Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Dernière intervention
15 avril 2011
- - Dernière réponse : vahanar
Messages postés
11
Date d'inscription
dimanche 23 mars 2008
Dernière intervention
9 avril 2015
- 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 

Votre réponse

8 réponses

Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
"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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
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
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Dernière intervention
7 février 2011
0
Merci
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
Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Dernière intervention
15 avril 2011
0
Merci
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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
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
Messages postés
1
Date d'inscription
dimanche 12 juillet 2009
Dernière intervention
14 avril 2011
0
Merci
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
Messages postés
11
Date d'inscription
dimanche 23 mars 2008
Dernière intervention
9 avril 2015
0
Merci
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
Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Dernière intervention
15 avril 2011
-1
Merci
Ma solution a ete d'abandonner code block et de rester sur visual c++. A l'epoque ca marchait plutot bien :-)
Commenter la réponse de runo

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.