Page 1 sur 1

les strutures externes (contenues dans une DLL)

Publié : dim. 18/mars/2007 22:22
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.

Publié : lun. 19/mars/2007 16:16
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

Publié : lun. 19/mars/2007 16:19
par Progi1984
Ton closelibrary doit être remplacé par CloseLibrary(#Lib)

Publié : lun. 19/mars/2007 17:57
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.

Publié : lun. 19/mars/2007 18:37
par Flype
j'ai beaucoup d'exemples/includes SDL pour Purebasic si çà t'intéresse...

Publié : lun. 19/mars/2007 19:42
par minirop
oui çà m'intéresse : minirop AT peyj DOT com

Publié : mer. 21/mars/2007 15:16
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.

Publié : lun. 07/mai/2007 15:52
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 !

Publié : lun. 07/mai/2007 17:15
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

Publié : mar. 08/mai/2007 6:29
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.

Publié : mar. 08/mai/2007 11:39
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++

Publié : mar. 08/mai/2007 16:18
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

Publié : mer. 09/mai/2007 7:55
par Progi1984
Oki ! merci !