[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