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  
