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

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

8 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
"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++
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Tu dois ajouter --add-stdcall-alias aux paramètres de gcc.
---
VB.NET is good ... VB6 is better
Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011

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.
Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011

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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
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
Messages postés
1
Date d'inscription
dimanche 12 juillet 2009
Statut
Membre
Dernière intervention
14 avril 2011

J'arrive un peu après la bataille...
As tu trouvé une solution, j'ai exactement le même problème ??
Messages postés
11
Date d'inscription
dimanche 23 mars 2008
Statut
Membre
Dernière intervention
9 avril 2015

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
Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
15 avril 2011

Ma solution a ete d'abandonner code block et de rester sur visual c++. A l'epoque ca marchait plutot bien :-)