Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 184 135

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» A l'aide : Pb CloseWindow() Intuition en C

A l'aide : Pb CloseWindow() Intuition en C#1310

6Contributeur(s)
zzd10hElwoodsinisrusalexFab
3 Modérateur(s)
K-LElwoodcorto
zzd10h zzd10hicon_post
Bonjour,
J'essaie de résoudre un problème de fenêtre Console gelée à la sortie d'un REXX à l'aide d'un petit prog C.
J'arrive à parcourir la liste des fenêtres ouvertes Intuition. Ensuite, je tente de tuer la fenètre qui m'intéresse avec la fonction CloseWindow().

Sous MOS, tout compile et s'exécute bien, liste des fenêtres et kill de celle que je veux, parfait !

Sous AOS, le même source, se compile bien mais il y a une erreur au link, cela ne marche que si je commente la fonction CloseWindow().
Sinon, undefined reference to `IIntuition'

gcc -D__USE_BASETYPE__ -D__USE_INLINE__ -O2 -c KillWindow_AOS.c
gcc -o KillWindow_AOS KillWindow_AOS.o

KillWindow_AOS.o: In function `main':
KillWindow_AOS.c:(.text+0x8a): undefined reference to `IIntuition'
KillWindow_AOS.c:(.text+0xe6): undefined reference to `IIntuition'
make: *** [KillWindow_AOS] Error 1

Est-ce que quelqu'un qui connait le C peut m'aider, svp ?

A la vue du source ci-dessous, vous comprendrez que je ne suis pas un pro du C (je me suis inspiré d'exemples trouvé sur internet), donc merci de ne pas utiliser de termes trop complexes ;)

Voici le source (les !include!s passent mal sur Amiga-NG, j'enléve les char spéciaux) :

!include! stdio.h
!include! exec/types.h
!include! intuition/intuition.h
!include! intuition/intuitionbase.h
!include! dos/dos.h
!include! proto/exec.h
!include! proto/intuition.h
!include! proto/dos.h

struct IntuitionBase *IntuitionBase = NULL;

int main(void)
{
IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 0L );

if ( IntuitionBase != NULL )
{
struct Window *NextWindow = ((struct IntuitionBase *)IntuitionBase)->FirstScreen->FirstWindow;

while (NextWindow)
{
if (NextWindow->Title)
{
printf("Fenetre : %s\n",NextWindow->Title) ;
if (strcmp(NextWindow->Title,"ReplayAOS+ console") == 0)
{
printf("Fenetre trouvée: %s\n",NextWindow->Title) ;
CloseWindow( NextWindow ); /* si commentaire => OK, sinon undefined reference to `IIntuition' */
}
}
NextWindow = NextWindow->NextWindow;
}
printf("Fin de la liste\n") ;
}
else
{
printf( "Pb à l'ouverture de intuition.library!\n" );
}

if ( IntuitionBase != NULL )
{
CloseLibrary( (struct Library *)IntuitionBase );
}
return 0;
}



Message édité par : zzd10h / 12-05-2012 15:34
Elwood Elwoodicon_post
Sur OS4, après avoir ouvert une librairie, il faut ouvrir son interface. Lis le PDF qui est dans le SDK d'AmigaOS 4 ou sur cette page.
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !

Message édité par : Elwood / 12-05-2012 18:24
zzd10h zzd10hicon_post
Merci pour la piste.
.
ça marche maintenant avec

IIntuition = (struct IntuitionIFace *)IExec->GetInterface((struct Library *)IntuitionBase ,"main",1,NULL) ;

et

IIntuition->CloseWindow( NextWindow );

et en retirant -D__USE_INLINE__

Dommage que les mêmes sources ne puissent pas être compilés sur les 2 OS Amiga :(

edit : Ah je n'avais pas vu le lien que tu avais mis. Il y avait ce qui me fallait dedans :)


Message édité par : zzd10h / 12-05-2012 18:58
icon_post
Pourquoi ne pas utiliser des #ifdef... [addsig]
zzd10h zzd10hicon_post
Oui, mais même avec

ifdef AMIGAOS
et
ifdef MORPHOS

il faut prévoir les 2.
Ce que je voulais dire c'est que c'est dommage que les même fonctions ne puissent pas être appelées exactement de la même maniére.
zzd10h zzd10hicon_post
Bon j'ai du louper quelque chose,
quand je tue ma fenétre tout se passe bien jusqu'à ce que je réouvre une Console...là freeze du systéme à tous les coups.

J'ai du oublié de purger qqchose avant de faire le CloseWindow.

:paf

Quand je parcours la liste des taches (struct exec/task), j'ai plusieurs tâches CON, comment savoir laquelle c'est?
Et aprés, est-ce un message qu'il faut lui envoyer ou un Remove ?

Je sens que je me suis lancé dans un truc qui me dépasse largement...

Edit : heureux hasard que cette news sur le wiki amigaos...avec CloseWindowSafely !
Message édité par : zzd10h / 13-05-2012 00:52
icon_post
Peut être vaut il mieux chercher pourquoi a la sortie du script Rexx la fenêtre est non close.
Ressource non libérée ? Si le script lance un programme il faudrait le "détacher" du cli.
Kamel [addsig]
zzd10h zzd10hicon_post
Merci pour ton aide, Kamelito, qu'entends tu par détacher du CLI ?

Le script lance mplayer.
Mplayer s'exécute, écrit dans la console,
Mplayer se termine,
Le script se termine (en envoyant un close de la console qu'il a ouvert)
Parfois la console reste ouverte
Ce qui est étrange c'est que ce n'est pas à tous les coups.
Message édité par : zzd10h / 13-05-2012 01:16
sinisrus sinisrusicon_post
sinon la solution radical, tu ajoute dans l'icone :

dans l'onglet icône :

Démarré à partir de : Workbench
et ajoute dans types d'outil : Console=NIL:

et la tu n'aura plus de console :-)
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
zzd10h zzd10hicon_post
Merci Sinisrus, mais je veux conserver la Console pour voir l'état d'avancement des lectures, télécharements...

j'ai réussi à faire un prog pour fermer ma console sans planter le workbench mais il faut que la fenètre soit vraiment gelée (cas de figure ci-dessous OK).

Kamelito, chez moi que cela soit à partir de mon REXX ou depuis un shell standard, l'envoi de cette commande provoque un gel de la fenètre console d'origine quand mplayer est fermé

mplayer -cache 8192 "http://vod-flash.canalplus.fr/WWWPLUS/PROGRESSIF/1205/LES_GUIGNOLS_DUPLEX_120509_CAN_260038_video_L.mp4"

sous MOS, pas de pb,
par curiosité, en est-il de même chez vous ?
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme