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
et avec LoadLibrary / GetProcAddress ?
http://msdn.microsoft.com/library/defau ... ibrary.asp

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 :wink:

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 :wink:

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

Publié : ven. 14/avr./2006 15:15
par flaith
Image Sous devc++ ? comment ? please help !!! Image

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 ?

Code : Tout sélectionner

__declspec(dllimport) void __cdecl error(char* msg);
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
:oops: :lol: 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 :wink: