[#1] INST_DATA w C++
Witam!

Mam dosyc masochistyczną zachciankę przepisania na C++ programu z kursu MUI (made by Krashan). Program sluzyl do wyswietlania plików dzwiękowych na wykresie (bylo to bodajrze w 12 odcinku sagi o MUI). Dosyc nieoczekiwanie pojawil sie jednak problem z pewną funkcją która siedzi w intuition/classes.h. Chodzi mi dokladnie o INST_DATA. Przy takim oto kodzie:
struct WykresData
 {
  WORD *buffer;   
  LONG first;
  LONG lenght;
 };

/* metoda New */

 LONG mNew (Class *cl, Object *obj, struct opSet *msg)
 {
  struct WykresData *data;

  if (obj = (Object*)DoSuperMethodA (cl, obj, (Msg)msg))
   {
    [b]data = (INST_DATA (cl,obj)); [/b]
    data->buffer = (WORD*)GetTagData (WYKA_Buffer, NULL, msg->ops_AttrList);
    data->first = GetTagData (WYKA_SampleStart, 0, msg->ops_AttrList);
    data->lenght = GetTagData (WYKA_SampleLenght, 0, msg->ops_AttrList);
    return (LONG)obj;
   }
  CoerceMethod (cl, obj, OM_DISPOSE);
  return NULL;
 }


... kompilator wywala mi następujący komunikat:

"void*" -> "type*": allowed in C mode only

... a tak wyglada INST_DATA u źródła (classes.h)
/* add offset for instance data to an object handle */
#define INST_DATA(cl,o)  ((void *)(((UBYTE *)o)+cl->cl_InstOffset))


W jakis sposób można to ominąć, może jakies rzutowanie ?

Z gory dziekuje za wszelkie sugestie


Pozdrawiam
MarX

[#2] Re: INST_DATA w C++

@MarX, post #1

data = (WykresData *)(INST_DATA(cl,obj));

[#3] Re: INST_DATA w C++

@Kaczus, post #2

Kaczuś się marnuje. BlaBla come back! :D
[#4] Re: INST_DATA w C++

@R-Tea, post #3

Wlasnie. Kaczus napislabys pare killerappow na MOSa:)
[#5] Re: INST_DATA w C++

@quaint, post #4

Czyli co programów wieszających mosa? :P

[#6] Re: INST_DATA w C++

@Kaczus, post #2

Dzieki!
O to wlasnie chodzilo! Z tym ze mam jeszcze jeden klopot, ktory pojawil sie w fazie tworzenia nowego obiektu juz w aplikacji MUI. Otoz gdy chce utworzyc okbiekt wykresu, w sposob nastepujacy:
MUIA_Group_Child, Wyk = NewObject (WykresClass->mcc_Class, NULL,
      MUIA_Frame, MUIV_Frame_InputList,
      MUIA_Background, MUII_ListBack,
      WYKA_Buffer, 0x00F80000,
      WYKA_SampleStart, 0,
      WYKA_SampleLenght, 250,
     [b]TAG_END),[/b]


... to kompilator krzyczy, wskazujac linie TAG_END), i mowi ze ma znowu problem z typem danych:

"void*" -> "type*" : allowed in C mode only.

z tym ze w tym miejsu juz calkowicie nie wiem do czego mam zrzutowac wartosci przy (WYKA_SampleStart itd.). Gdy rzutuje na LONG to wyskakuje dalej ten sam komunikat. Byc moze ma tutaj cos do gadania funkcja mNew, ktora wyglada nastepujaco:
/* metoda New */

 LONG mNew (Class *cl, Object *obj, struct opSet *msg)
 {
  struct WykresData *data;

  if (obj = (Object*)DoSuperMethodA (cl, obj, (Msg)msg))
   {
    data = (WykresData *)(INST_DATA (cl,obj));
    data->buffer = (WORD*)GetTagData (WYKA_Buffer, NULL, msg->ops_AttrList);
    data->first = GetTagData (WYKA_SampleStart, 0, msg->ops_AttrList);
    data->lenght = GetTagData (WYKA_SampleLenght, 0, msg->ops_AttrList);
    return (LONG)obj;
   }
  CoerceMethod (cl, obj, OM_DISPOSE);
  return NULL;
 }




Pozdrawiam
MarX

[#7] Re: INST_DATA w C++

@MarX, post #6

użyj TAG_DONE

[#8] Re: INST_DATA w C++

@Kaczus, post #2

data = (WykresData *)(INST_DATA(cl,obj));

fuj ;)
powinno być tak:

data = static_cast(INST_DATA (cl,obj));

lub

data = reinterpret_cast(INST_DATA (cl,obj));

[#9] Re: INST_DATA w C++

@smith, post #8

Może i powinno być, ale nie wiem, jakiego kompilatora uzywa pytający,
toteż wolę podać rozwiązanie uniwersalne.

[#10] Re: INST_DATA w C++

@MarX, post #1

Trochę kod brudny i wogóle, ale sądzę, że parę sztuczek może Ci się
przydać: http://kaczus.republika.pl/2b_MUIPlus_MOS.lha

[#11] Re: INST_DATA w C++

@Kaczus, post #10

TAG_DONE niestety nie pomogło. Ale dzięki za link. Twoje materialy daja jakies ogolne wyobrazenie o sposobie programowania pod MUI w C++, jutro bede sie nad tym pastwil :)


Pozdrawiam
MarX

p.s. masz moze wiecej jakichs ciekawych zrodlowek w C++ pod Amigę ?

[#12] Re: INST_DATA w C++

@MarX, post #11

MarX napisał(a):

> p.s. masz moze wiecej jakichs ciekawych zrodlowek w C++ pod
> Amigę ?

http://kaczus.republika.pl/various_files/2b_krucha_nntp_mos.lha

[#13] Re: INST_DATA w C++

@Kaczus, post #2

Kaczus napisał(a):

> data = (WykresData *)(INST_DATA(cl,obj));

A fuj chlopie! Wstydz sie. Jak juz to:

data = reinterpret_castINST_DATA(cl,obj);

:P

[#14] Re: INST_DATA w C++

@MarX, post #11

Moze sie na c++ nieznam zbytnio ale czy po nawiasie nie powinien byc znak sredniaka a nie przecinek?



Ostatnia modyfikacja: 09.05.07 10:02
[#15] Re: INST_DATA w C++

@Phibrizzo, post #14

A to juz zalezy co bylo dalej, widzimy tylko fragment kodu, trudno ocenic, ale wydaje mi sie, ze tam powinien byc jednak przecinek, to co mi przyszlo do glowy, to, ze wynik powinien pewnie zrzutowac, zreszta niech zobaczy w przyklady co mu linka do nich dalem.

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem