[Gambas-devel] A cdrom component
Benoit Minisini
gambas at ...1...
Sat Apr 3 12:03:08 CEST 2004
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 at ...1...
More information about the Devel
mailing list