Code::Block DLL pour l'utiliser dans VB

Résolu
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 28 janv. 2010 à 13:44
vahanar Messages postés 11 Date d'inscription dimanche 23 mars 2008 Statut Membre 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.

8 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
28 janv. 2010 à 15:45
"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++
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 janv. 2010 à 19:09
Tu dois ajouter --add-stdcall-alias aux paramètres de gcc.
---
VB.NET is good ... VB6 is better
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 00:38
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.
0
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011
29 janv. 2010 à 09:14
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
29 janv. 2010 à 18:19
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
0
krapo13 Messages postés 1 Date d'inscription dimanche 12 juillet 2009 Statut Membre Dernière intervention 14 avril 2011
14 avril 2011 à 18:15
J'arrive un peu après la bataille...
As tu trouvé une solution, j'ai exactement le même problème ??
0
vahanar Messages postés 11 Date d'inscription dimanche 23 mars 2008 Statut Membre Dernière intervention 9 avril 2015
9 avril 2015 à 15:10
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
0
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011
15 avril 2011 à 00:44
Ma solution a ete d'abandonner code block et de rester sur visual c++. A l'epoque ca marchait plutot bien :-)
-1