amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > MUI SliderObject Bug? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.11.2006, 04:29 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Hat irgendwer mehrere Klassen auf MUIC_Slider aufbauend erzeugt?, ich habe MUIC_Slider als Basisklasse genommen um mittels MUIM_Numeric_Stringify in den Slidern anstatt einer Nummer einen Text auszugeben, das ging auch ganz gut, irgendwann habe Ich eine Neue Klasse gleichen Basistyps erzeugt. Nun gut Ich bakam immer wieder Meldungen das Teile der GUI garnicht mehr auftauchten und es Abstürze gab. Nun habe Ich mir den Code angeschaut und den Part gefunden der das verursacht und Obwohl die Codes beider Dispatcher 99% identisch sind schmiert das Object der einen Klasse immer wieder ab.

Ich kann den ganzen Dispatchercode auch völlig weglassen, bzw in diesem nur DoSuperMethod() aufrufen, wodurch meine Klasse 100% der Basisklasse entspricht.

Ich erzeuge die Klassen durch folgende Sequenz:

code:
BubbleClass = (struct MUI_CustomClass *) MUI_CreateCustomClass(NULL,MUIC_Slider,NULL,sizeof(struct BubbleData), (APTR) BubbleDispatcher);
ImageSizeClass = (struct MUI_CustomClass *) MUI_CreateCustomClass(NULL,MUIC_Slider,NULL,sizeof(struct ImageSizeData), (APTR) ImageSizeDispatcher);


Die Dispatcher gebe Ich nicht an, da der Fehler nicht darin zu suchen ist.

in diesem Fall stürzt das Object welches von ImageSizeClass erzeugt wird ab, das jenige welches von BubbleClass erzeugt wird jedoch nie.

Wenn Ich die Klassenerzeugung jedoch vertausche, d.h. zuerst due ImageSizeClass erzeuge und dann die BubbleClass schmiert genau das andere Object ab.

Wenn ich MUIC_Slider durch z.B. MUIC_Numericbutton ersetze, was Problemlos möglich ist, aber nicht so schön aussieht, gibt's keine Fehler.

Hat jemand ähnliches Beobachtet?, oder kennt jemand ein Programm welches MUIC_Slider mehrfach ableitet?.

SliderObjects kann Ich mehrere verwenden, aber nicht mehrfach eine Unterklasse davon erstellen.

Ahso das Problem habe ich nur unter OS3.x/68k

Ahso OM_NEW ist die einzige Methode die Aufgerufen wird und diese schmiert dann ab.

[ - Antworten - Zitieren - Direktlink - ]

20.11.2006, 13:25 Uhr

tokai
Posts: 1071
Nutzer
Kannst Du bitte Deine dispatcher, OM_NEW und InstanceData mit angeben? In den 2 Zeilen die du gepostet hast ist kein Bug, also wird er wohl in den anderen Zeilen sein. Vielleicht ist deine InstanceData ja einfach nur zu gross (da gibts ein Grössenlimit) ;)

Das MUI selbst einen derartigen MUIC_Slider Bug hat bezweifle ich.

regards,
tokai
--
http://www.christianrosentreter.com ~ MorphOS Software

[ - Antworten - Zitieren - Direktlink - ]

20.11.2006, 14:22 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von tokai:
Kannst Du bitte Deine dispatcher, OM_NEW und InstanceData mit angeben? In den 2 Zeilen die du gepostet hast ist kein Bug, also wird er wohl in den anderen Zeilen sein.


Ich dachte ich hätte angegeben, daß im Dispatcher nichts außer DoSuperMethod() stehen braucht, aber ich kann das dennoch hier angeben.

code:
struct BubbleData {
	   char buf[20];
   };

   DISPATCHERPROTO(BubbleDispatcher) {
	   DISPATCHER_INIT
			   if (msg->MethodID==MUIM_Numeric_Stringify)
	   {
		   struct BubbleData *data = INST_DATA(cl,obj);
		   struct MUIP_Numeric_Stringify *m = (APTR)msg;

		   if (m->value==0) strcpy((char *) data->buf,"disabled!");
		   else if (m->value==5) strcpy((char *) data->buf,"1 sec ;-)");
		   else if (m->value==10) strcpy((char *) data->buf,"2 sec ;-)");
		   else if (m->value==15) strcpy((char *) data->buf,"3 sec :-)");
		   else if (m->value==20) strcpy((char *) data->buf,"4 sec :-)");
		   else if (m->value==25) strcpy((char *) data->buf,"5 sec :-|");
		   else if (m->value==30) strcpy((char *) data->buf,"6 sec :-(");
		   else if (m->value==35) strcpy((char *) data->buf,"7 sec :-(");
		   else if (m->value==40) strcpy((char *) data->buf,"8 sec ;-(");
		   else if (m->value==45) strcpy((char *) data->buf,"9 sec ;-(");
		   else if (m->value==50) strcpy((char *) data->buf,"10 sec i'm sad");
		   else {
			   sprintf((char *)data->buf,"%ld ms", m->value*200);
		   }
		   return((ULONG) data->buf);
	   }
	   return((ULONG) DoSuperMethodA(cl,obj,msg));
	   DISPATCHER_EXIT
   }


aber wie gesagt, an Stringify liegt's nicht, d.h. auch

code:
DISPATCHERPROTO(BubbleDispatcher) {
	   DISPATCHER_INIT

	   return((ULONG) DoSuperMethodA(cl,obj,msg));
	   DISPATCHER_EXIT
   }


schmiert oft ab, sobald ich noch eine zweite Klasse erstelle und davon ein Object erstelle.

Zitat:
Vielleicht ist deine InstanceData ja einfach nur zu gross (da gibts ein Grössenlimit) ;)

Das MUI selbst einen derartigen MUIC_Slider Bug hat bezweifle ich.


20 Bytes, ich glaube nicht daß das zu groß ist.

Es wird DoSuperMethod(OM_NEW) aufgerufen und schmiert ab, d.h kehrt nicht zurück.

Ich weiß nicht ob es an vieleicht was anderem liegt, meine Vermutung AfA hat sich nicht bestätigt, auf AROS läuft der Code immer, unter 68k schmiert das Teil mal ab, mal läuf er und mal wird die Gruppe, welche das Object enthält garnicht dargestellt.

Da das Vertauschen der beiden MUI_CreateCustomClass() auch den Absturz in die Erzeugung des anderen Objektes verschiebt, würde für mich bedeuten das OM_NEW auf irgendwelche Globals zugreift

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI SliderObject Bug? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.