Utilisation DLL PB pour utilisation sous C

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Utilisation DLL PB pour utilisation sous C

Message 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
:?
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message 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 ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

et avec LoadLibrary / GetProcAddress ?
http://msdn.microsoft.com/library/defau ... ibrary.asp
Image
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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:
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Code : Tout sélectionner

ProcedureCDLL Error(msg.s) 
  MessageRequester("ERROR",msg,#PB_MessageRequester_Ok) 
EndProcedure
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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:
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Chez moi, ça fonctionne parfaitement.
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Image Sous devc++ ? comment ? please help !!! Image
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Oui, sous devc++, je renomme le foo.lib en libfoo.a que j'ajoute dans les options du linker (-lfoo).
Dernière modification par KarLKoX le ven. 14/avr./2006 16:02, modifié 2 fois.
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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 :)
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message 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; 
}
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message 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:
Répondre