les strutures externes (contenues dans une DLL)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

les strutures externes (contenues dans une DLL)

Message par minirop »

bonjour,
je m'essaie à différents codes (test only) et là je bute sur un problème.
Je souhaites utiliser la SDL en PB mais j'y arrive pas, voilà mon code.

Code : Tout sélectionner

#sdl_lib = 0
#SDL_HWSURFACE	= $00000001	;/* Surface is IN video memory */
#SDL_ASYNCBLIT	= $00000004	;/* Use asynchronous blits If possible */
#SDL_ANYFORMAT	= $10000000	;/* Allow any video depth/pixel-format */
#SDL_HWPALETTE	= $20000000	;/* Surface has exclusive palette */
#SDL_DOUBLEBUF	= $40000000	;/* Set up double-buffered video mode */
#SDL_FULLSCREEN	= $80000000	;/* Surface is a full screen display */
#SDL_OPENGL		= $00000002	;/* Create an OpenGL rendering context */
#SDL_OPENGLBLIT	= $0000000A	;/* Create an OpenGL rendering context And use it For blitting */
#SDL_RESIZABLE	= $00000010	;/* This video mode may be resized */
#SDL_NOFRAME	= $00000020	;/* No window caption Or edge frame */

Structure SDL_Surface
EndStructure

Prototype pSDL_Init()
Prototype pSDL_Quit()
Prototype pSetVideoMode(width.l,height.l,bpp.l,flags.l)
Prototype pBlit(*src.SDL_Surface,*rect.l,*dest.SDL_Surface,*p.l)
Prototype pLoadBMP(img.s)

If OpenLibrary(#sdl_lib,"SDL.dll")
	vinit.pSDL_Init = GetFunction(#sdl_lib,"SDL_Init")
	vquit.pSDL_Quit = GetFunction(#sdl_lib,"SDL_Quit")
	setv.pSetVideoMode = GetFunction(#sdl_lib,"SDL_SetVideoMode")
	blit.pBlit = GetFunction(#sdl_lib,"SDL_BlitSurface")
	loadbmp.pLoadBMP = GetFunction(#sdl_lib,"SDL_LoadBMP")
	
	*img.SDL_Surface = loadbmp("test.bmp") ; j'ai un "invalid access memory" ici
	
	vinit()
	*ecran.SDL_Surface = setv(800,600,32,#SDL_HWSURFACE | #SDL_DOUBLEBUF)
	blit(*img,#Null,*ecran,#Null)
	Delay(5000)
	vquit()
EndIf
seulement, si je fais :
Prototype.SDL_Surface xxx
çà me sort :
a structure can't be use in a ProcedureReturn

donc voici mes questions :
1/ est on obliger de mettre un type de retour à un prototype ?
2/ comment on mets une struture ?
3/ Et un pointeur ?

merci.
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

finalement çà marche !

sinon j'ai un petit problème pour lister les fonctions dans une DLL.

Code : Tout sélectionner

#Win = 0
#Lib = 1
#List = 2
If OpenWindow(#Win,100,100,800,600,"Look In SDL.dll")
	If CreateGadgetList(WindowID(#Win))
		If ListViewGadget(#List,10,10,780,580)
			If OpenLibrary(#Lib,"SDL.dll")
				If ExamineLibraryFunctions(#Lib)
					While NextLibraryFunction()
						AddGadgetItem(#List,-1,LibraryFunctionName())
					Wend
				EndIf
				CloseLibrary(0)
			EndIf
		EndIf
	EndIf
	Repeat
	Until EventID = #PB_Event_CloseWindow
EndIf
et çà me sort comme si il y avait une boucle infinie. (fenêtre qui freeze)
merci
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Ton closelibrary doit être remplacé par CloseLibrary(#Lib)
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

j'avais pas pu quand j'ai poster mais en mettant bien #Lib à la place du 0 çà marche pas plus.
m'enfin, j'ai trouver un programme qui fait la même chose.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

j'ai beaucoup d'exemples/includes SDL pour Purebasic si çà t'intéresse...
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

oui çà m'intéresse : minirop AT peyj DOT com
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je préparerais çà ce week end - c'est un peu le dawa sur mon disque dur en ce moment.
mais si je le mets ce sera sur le forum - pas sur ton adresse perso histoire de faire profiter tout le monde.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

@Minirop, je vois que tu utilises la fonction BlitSurface.

En regardant dans le contenu de la dernière DLL online, je ne l'ai pas trouvé. Pourrais tu me dire où se trouve cette fonction ? merci !
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

Progi1984 a écrit :@Minirop, je vois que tu utilises la fonction BlitSurface.

En regardant dans le contenu de la dernière DLL online, je ne l'ai pas trouvé. Pourrais tu me dire où se trouve cette fonction ? merci !
c'est un #define préprocesseur sur SDL_UpperBlit
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Flype a écrit : mais si je le mets ce sera sur le forum - pas sur ton adresse perso histoire de faire profiter tout le monde.
@Flype

Ta générosité n'a d'égal que ta compétence.......... 8)
J'aspire sincerement à te ressembler, rien qu'un petit peu, un jour....... :oops:

Ce serait un miracle, mais n'ont il pas été créé pour que se produise l'impossible.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

minirop a écrit :
Progi1984 a écrit :@Minirop, je vois que tu utilises la fonction BlitSurface.

En regardant dans le contenu de la dernière DLL online, je ne l'ai pas trouvé. Pourrais tu me dire où se trouve cette fonction ? merci !
c'est un #define préprocesseur sur SDL_UpperBlit
Cad ? je ne suis pas un expert en C/C++
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

Progi1984 a écrit :Cad ? je ne suis pas un expert en C/C++
c'est une macro tout simplement.
même si tu écris "SDL_BlitSurface()", le préprocesseur remplace par "SDL_UpperBlit()" avant la compilation
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Oki ! merci !
Répondre