Page 1 sur 1
Utilisation DLL PB pour utilisation sous C
Publié : ven. 14/avr./2006 1:28
par flaith
Après avoir créé une DLL avec PureBasic, je voudrais l'utiliser sous C (gcc)
donc j'ai la lib (renommé en .a) et voici le bout de code c :
Code : Tout sélectionner
#include <stdio.h>
#include <stdlib.h>
#define DECLSPEC __declspec(dllimport)
#define CDECL __cdecl
#define STDCALL __stdcall
//DECLSPEC void STDCALL error(char* msg);
DECLSPEC void CDECL error(char* msg);
int main()
{
error("Oops, mince ya un problème");
system("PAUSE");
return 0;
}
essai avec STDCALL ou CDECL même soucis, pour le 1er :
[Linker error] undefined reference to `_imp__error@4'
et pour le 2ème :
[Linker error] undefined reference to `_imp__error'
le code pb pour la DLL :
Code : Tout sélectionner
ProcedureDLL Error(msg.s)
MessageRequester("ERROR",msg,#PB_MessageRequester_Ok)
EndProcedure

Publié : ven. 14/avr./2006 6:42
par Polo
Déjà logiquement tu devrais mettre stdcall.
mais je suis pas sur que la lib renommé en a soit censée marcher, si ?
Publié : ven. 14/avr./2006 6:49
par Flype
Publié : ven. 14/avr./2006 10:42
par flaith
@polo
j'indique bien un stdcall (ligne #define), et j'ai aussi essayé avec Pelles C - qui utilise le .lib par défaut - et même erreur
@flype
ces fonctions sont a utiliser si on a pas une lib (.lib ou .a) or j'ai une lib - qd on créé une DLL, PB créé automatiquement une lib (.lib)
merci de vous être penché sur mon petit soucis

Publié : ven. 14/avr./2006 11:35
par KarLKoX
Code : Tout sélectionner
ProcedureCDLL Error(msg.s)
MessageRequester("ERROR",msg,#PB_MessageRequester_Ok)
EndProcedure
Publié : ven. 14/avr./2006 12:08
par flaith
Merci KarlKox, mais ca n'a rien changé, tjrs même soucis
NB: je connaissais pas ce type de Procédure, c'est pas dans l'aide, faudrait penser à la rajouter

Publié : ven. 14/avr./2006 14:48
par KarLKoX
Chez moi, ça fonctionne parfaitement.
Publié : ven. 14/avr./2006 15:15
par flaith

Sous devc++ ? comment ? please help !!!

Publié : ven. 14/avr./2006 15:18
par KarLKoX
Oui, sous devc++, je renomme le foo.lib en libfoo.a que j'ajoute dans les options du linker (-lfoo).
Publié : ven. 14/avr./2006 16:01
par flaith
bon, c'est ce que j'ai déjà fait, j'ai déjà créé plein de lib sous C, sans aucun soucis, la je sèche complètement.
ta ligne pour déclarer l'import de la fonction dans la DLL ressemble-t-elle à ca ?
ceci en partant du fait que la DLL a été créé avec
Code : Tout sélectionner
ProcedureCDLL Error(msg.s)
MessageRequester("ERROR",msg,#PB_MessageRequester_Ok | #MB_ICONERROR)
EndProcedure
d'avance merci

Publié : ven. 14/avr./2006 16:03
par KarLKoX
A noter que le C/C++ respecte la casse, tu dois donc écrire :
Code : Tout sélectionner
#include <stdio.h>
#include <stdlib.h>
#define DECLSPEC __declspec(dllimport)
#define CDECL __cdecl
#define STDCALL __stdcall
//DECLSPEC void STDCALL error(char* msg);
DECLSPEC void CDECL error(char* msg);
int main()
{
Error("Oops, mince ya un problème");
system("PAUSE");
return 0;
}
Publié : ven. 14/avr./2006 16:24
par flaith

Merci beaucoup pour m'avoir fait ouvrir les yeux ...
quel c.. je suis (rigolez pas), me reste plus qu'à aller me cacher au fond de la fôret et pleurer ... ARGGHHH !!!
Encore merci
