[prev in list] [next in list] [prev in thread] [next in thread]
List: gambas-devel
Subject: Re: [Gambas-devel] A cdrom component
From: Benoit Minisini <gambas () users ! sourceforge ! net>
Date: 2004-04-03 10:03:08
Message-ID: 200404031203.08211.gambas () users ! sourceforge ! net
[Download RAW message or body]
On Thursday 01 April 2004 16:34, Sahastume Christian wrote:
> Hi Benoît,
Bonjour Christian,
Je suis français (visiblement ce n'est pas clair sur mon site...)
Désolé pour ma réponse tardive, je suis bien occupé !
>
> I made you share (a few days ago on the list users) my intention to write a
> component of access to the cdrom (via lib SDL).
> I based myself on your component SDL to write mine. I am blocked by the
> fact that Gambas give me an error (Error 24#: No startup method)
Il faut définir une méthode Main() publique ET statique. Le mot-clef STATIC
n'est pas nécessaire si la classe de démarrage est un module.
>
> I have this same error when I try to employ the following code (on yours
> SDL component):
>
> PUBLIC MyMusic as Music
>
> PUBLIC Sub Main()
>
> MyMusic.Load("/home/user/file.wav")
> MyMusic.Play()
>
> END
>
> My test of component is compiled well and the methods and properties are
> posted correctly in Gambas. But this code raise an error:
>
> PUBLIC MyCdrom as Cdrom
>
> PUBLIC Sub Main()
> DIM n as INTEGER
>
> n = MyCdrom.Devices.Count()
> PRINT n
>
> END
>
> Could you give me a hand to allow me to advance? (I join you my little
> try)
>
> Regards....
>
> Christian.
>
J'ai regardé ton code. Voici ce que je peux te dire:
Tu fais un SDL_Init(SDL_CDROM), ok, mais un SDL_Quit() comme si le composant
était seul à utiliser SDL. Erreur ! :-)
Je pense qu'il est inutile de créer un composant à part. Autant intégrer tout
ça au composant SDL déjà existant. Comme ça, il n'y aura qu'un seul
SDL_Quit().
Tu ne fais pas de distinction entre ce qui est statique (global à toute la
classe, comme la liste des lecteurs de cdroms) et dynamique (ce qui est
propre à un lecteur en particulier). En clair, CDRom.Devices doit être
statique.
Je supprimerais la classe CDRom.Devices, et créerais une propriété
CDRom.Devices qui retournerait un String[] contenant le nom de chaque CD-Rom.
Pour utiliser un lecteur de CD-Rom, il faut instancier la classe. Comme le
nombre de lecteurs est limité, il vaudrait mieux :
- D'avoir une méthode statique _get qui retourne toujours la même instance
pour le même lecteur. Elle prendrait en paramètre le nom du lecteur sous
forme de chaîne
- Que la classe CDROM soit "GB_NOT_CREATABLE()", pour que l'utilisateur ne
puisse pas lui-même créer d'objets CDRoms.
Ainsi, on pourrait faire CdRom[CdRom.Devices[0]].Play !
Cdrom.Status doit retourner des constantes entières, et non des chaînes !
Utilise directement les valeurs des constants SDL.
CdRom devrait avoir une propriété Name qui retourne le nom du device.
Il faudrait renommer Track.CurrentPos en Track.Pos (tout simplement)
Remplac 'GB.Error ("Insert a media in your cdrom drive");' par 'GB.Error ("No
media");'
Voilà, c'est tout :-)
Si tu peux faire toutes ces modifs, ce serait super. Garde ton composant, je
m'occuperai ensuite de l'intégrer au gb.sdl principal.
Amicalement,
--
Benoit Minisini
mailto:gambas@users.sourceforge.net
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id70&alloc_id638&opÌk
_______________________________________________
Gambas-devel mailing list
Gambas-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic