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

amiga-news.de Forum > Programmierung > MUI Klasse und externer Pointer [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

23.08.2005, 11:19 Uhr

geit
Posts: 332
[Ex-Mitglied]

Ich habe eine interne MUI Klasse erzeugt und das alles funktioniert auch wunderbar.

Jetzt habe ich aber ein Problem. Ich arbeite in einem relativen Kontext und muß einen Pointer an den Dispatcher übergeben. Idealerweise wäre das bevor er aufgerufen wird, also beim Erzeugen.

Es gibt zwar ein User Feld in der struct MUI_CustomClass, aber wie komme ich da im Dispatcher ran?

Guido Mersmann

[ - Antworten - Zitieren - Direktlink - ]

23.08.2005, 11:55 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Das verstehe ich nicht ganz, erstens was meinst du mit relativen Kontext und zweitens warum ist es wichtig dass die Customclass darankommt bevor der Dispatcher aufgerufen wird?, schliesslich hat der dispatcher dafür zu sorgen, dass die Klasse initialisiert wird (OM_NEW, OM_SETUP etc.)

Du kannst doch einfach in OM_NEW dafür sorgen dass die Klasse den Pointer über ein TAG ausliesst und notfalls Fehlschlägt wenn es nicht möglich ist.

[ - Antworten - Zitieren - Direktlink - ]

23.08.2005, 12:30 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Eine zusatzfrage, irgendwie ist für mich nicht klar was mit "Mit Pointer an den Dispatcher übergeben, bevor er aufgerufen wird", wenn du ihn nicht aufrufst, dann wird dann kann man auch nichts übergeben, aber ich denke einfach du möchtest so etwas in der Art:

code:
DISPATCHERPROTO(MyImageDispatcher) {

 
	   DISPATCHER_INIT
           APTR ptr = GetUserData(cl);
	   switch (msg->MethodID)
	   {
		   case OM_NEW          : ...
	   }

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


dann gibt's vieleicht einen einfachen Weg, auch die struktur IClass hat ein UserData Feld und darau kannst du im Dispatcher zugreifen.

code:
DISPATCHERPROTO(MyImageDispatcher) {

	   DISPATCHER_INIT
           APTR ptr = cl->cl_UserData;

	   switch (msg->MethodID)
	   {
		   case OM_NEW          : ...
	   }

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


und nach CreateCustomClass:
code:
mcc = MUI_CreateCustom..()
mcc->mcc_Class->cl_UserData = ...;


Ich hab's getestet das geht, nur ob das so Korrekt ist weiss ich nicht.


[ - Antworten - Zitieren - Direktlink - ]

23.08.2005, 14:00 Uhr

geit
Posts: 332
[Ex-Mitglied]
Ich hätte nicht gedacht so schnell so viele Antworten zu bekommen. :)

Deine (Darius) Lösung aus der MUI ML:

<quote>

mcc = MUI_CreateCust..()
mcc->mcc_Class->cl_UserData = data;

in the Dispatcher:

data = cl->cl_UserData;

</quote>

Funktioniert perfekt! Danke an alle!

Die bisherige Lösung war nicht vorzeigbar und "gefährlich"! :)


[ Dieser Beitrag wurde von geit am 23.08.2005 um 14:01 Uhr editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

23.08.2005, 14:04 Uhr

geit
Posts: 332
[Ex-Mitglied]

> ne zusatzfrage, irgendwie ist für mich nicht klar was mit "Mit Pointer an den Dispatcher übergeben, bevor er aufgerufen wird", wenn du ihn nicht aufrufst, dann wird dann kann man auch nichts übergeben.

Das war etwas unglücklich formuliert. Der Dispatcher und alle Methods sollten bereits beim ersten Aufruf Zugriff auf die Daten haben.

Existieren müssen sie, da es sonst die Klasse nicht geben würde.

Wie gesagt das cl_UserData war genau das was ich brauchte.

Guido Mersmann

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI Klasse und externer Pointer [ - Suche - Neue Beiträge - Registrieren - Login - ]


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