[#1] MUI vs C++
Witam!

Jak zwykle przychodzę do was z "drobnym" problemem. Otóż ostatnimi czasy zainteresowałem się pisaniem programów z wykorzystaniem MUI. Na początek liznąłem troche teorii (może nie tyle teorii MUI, ile tak ogólnie) poprzez AmigaOS od środka, potem w ruch poszedł Kurs MUI, autorstwa Krashana. Co prawda dwa pierwsze podejscia doprowadziły mnie do skrajnej depresji oraz myśli samo (i amigo) bójczych, ale za trzecim razem coś zatrybiło. Zacząłem analizować pierwsze przykłady i rozbijać je na atomy. Wszystko było super dopóki nie postanowiłem przerzucić jakiejś prymitywnej źródłowki na moje ukochane C++. I tutaj niespodziewanie potknąłem się od razu na pierwszym schodku. Okazało się ze mam jakieś potworne problemy, ze zmuszeniem kompilatora C++ (na poczatku StormGCC4 potem GCC) do skompilowania przykładowego programu. Programu ktory w trybie C kompilował się bez zarzutu (po paru kosmetycznych zmianach oczywiscie). No i chodź bierz czlowieku (ta emoikonka jest normalnie w deche!). Oto listing jaki chcę wpakować do kompilatora. Zerknijcie na to i postawcie jakąś sensowną diagnozę (mam nadzieję, że Krashan nie obrazi się że tak bezczeszczę jego źródłowkę )

----------------------------------------

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
struct Library *MUIMasterBase;

Object *Program,*Okno;

int main ()
{

ULONG sygnaly;

if (!(MUIMasterBase = OpenLibrary ("muimaster.library", 16)))

{
cout<<"Program wymaga MUI w wersji 3.5+.n";
return 0;
}


Program = MUI_NewObject (MUIC_Application,
MUIA_Application_Author,"Grzegorz Kraszewski (Krashan/BlaBla)",
MUIA_Application_Base,"SCENA",
MUIA_Application_Description,"Program przykładowy",
MUIA_Application_Title,"Nasza scena",
MUIA_Application_Version,"$VER: scena 0.2 (13.7.98)",
MUIA_Application_Window, Okno = (Object*)MUI_NewObject (MUIC_Window,
MUIA_Window_Title, "Scena",
MUIA_Window_ID, 0x5343454E,
MUIA_Window_RootObject, MUI_NewObject (MUIC_Group,
MUIA_Group_Child, MUI_NewObject (MUIC_Text,
MUIA_Background, MUII_SHADOW,
MUIA_Font, MUIV_Font_Big,
MUIA_Text_Contents, "33833c33iAmiga 1200",TAG_END),

MUIA_Group_Child, MUI_NewObject (MUIC_Group,
MUIA_Frame, MUIV_Frame_Group,
MUIA_FrameTitle, "Parametry gościa",
MUIA_Background, MUII_GroupBack,
MUIA_Group_Rows, 4,
MUIA_Group_Child, MUI_NewObject (MUIC_Text,
MUIA_Text_Contents, "33rImię",
TAG_END),
TAG_END),
TAG_END),
TAG_END),
TAG_END);


if (Program)
{

DoMethod (Okno, MUIM_Notify, MUIA_Window_CloseRequest, MUIV_EveryTime, Program, 2,
MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);

SetAttrs (Okno, MUIA_Window_Open, TRUE, TAG_END);

while (DoMethod (Program,MUIM_Application_NewInput,&sygnaly) != MUIV_Application_ReturnID_Quit)
{
if (sygnaly)
{
sygnaly = Wait (sygnaly | SIGBREAKF_CTRL_C);
if (sygnaly & SIGBREAKF_CTRL_C) break;
}
}


SetAttrs (Okno, MUIA_Window_Open, FALSE, TAG_END);


MUI_DisposeObject (Program);
cout<<"Koniec wykonywania programu.n";
}

else
cout<<"Błąd: obiekt klasy MUIC_Application nie stworzony!n";

CloseLibrary (MUIMasterBase);

return 0;
}



--------------------------------------

...GCC wywala mi takie oto dwa błedy:

RAM:mini.cpp: In function `int main()':
RAM:mini.cpp:22: initialization to `UBYTE *' from `const char *' discards qualifiers


linia 22 to :
if (!(MUIMasterBase = OpenLibrary ("muimaster.library", 16)))


StormGCC w ogóle ześwirował (10 przeróżnych błędów, ale spokojnie, ten typ tak ma ;)). Tak czy owak, mam nadzieje że jest jakieś wyjście z tej sytuacji i że nie muszę się uczyć czystego C aby zaprogramować kiedyś coś sensownego pod Amigę :)

Z góry dzięki za wszelką pomoc
Pozdrawiam

[#2] Re: MUI vs C++

@MarX, post #1

po wpisaniu:
g++ -noixemul ble.cpp -o wynik
program się skompilował i uruchomił
kompilator to gcc 2.95.4 a system morphos ale to chyba nie ma wpływu (choć moze pod gcc3.x jest inaczej)
[#3] Re: MUI vs C++

@rzookol, post #2

Niestety u mnie dalej leży :(. Może brakuje mi jakiegoś komponentu w GCC ???

[#4] Re: MUI vs C++

@MarX, post #3

A na pewno uzywasz polecenia g++ a nie gcc??
[#5] Re: MUI vs C++

@Masta Krishna, post #4

odpalam z g++ oczywiscie

[#6] Re: MUI vs C++

@MarX, post #5

mam nadzieję że słyszałeś, że MUI i C++ nie lubią się nawzajem. wbijano mi to juz na tym forum kilka razy do głowy. to jest właśnie największy ból, że jak chcesz robić MUIowe programy a jednocześnie pisać to w C++ to zawsze będą kłopoty, bo autor MUI napisał w czystym C.
Podobno na OS4 nie ma już tego problemu, ale nie dam głowy.
[#7] Re: MUI vs C++

@R-Tea, post #6

Cóż, chyba masz rację R-Tea. Ale jednak po całym dniu mordobicia wynalazłem pewne rozwiązanie tego "wstydliwego" problemu. Może nieco mniej efektowne (na dłuższą metę na pewno), ale póki co działa. Chodzi o to, że mój nierozłączny towarzysz broni (StormGCC4) może kompilować źródłówki nie tylko w trybie GCC, ale również w trybie StormC3. Nie dawałem temu drugiemu rozwiązaniu zbyt wielkich szans, ale... okazało się, że źródłowke skompilował niemal bezbłędnie i to w błyskawicznym tempie (musiałem tylko wywalić "using namespace std;"). Tak więc jakieś rozwiązanie jest, przynajmniej narazie do nauki i testowania źródłówek. Może trzeba skombinować jeszcze jakąś inną wersję GCC, która łapie już klimat MUI ??? Póki co lecę na Stormie :)

Pozdrawiam!

[#8] Re: MUI vs C++

@MarX, post #7

A co z pakietem MUI++ ?

[#9] Re: MUI vs C++

@MarX, post #7

A moze trzeba skombinowac wlasciwe includy?

[#10] Re: MUI vs C++

@Kaczus, post #9

Może i tak , tylko skąt ja tu wytrzasnę includy dobrze działające z MUI i to jeszcze na Amigę classic (teraz wszyscy pykają na Pegazach :D). Jakby jednak ktoś je posiadał (nie tylko includy, może być cale archiwum z GCC), ktore dobrze kompilują źródełka w C++ (z elementami MUI) to proszę o kontakt na maila

Pozdrawiam!

[#11] Re: MUI vs C++

@MarX, post #10

Chodzi o linie dla c++. Byc moze ich nie masz... zreszta latwiej byloby ci cos doradzic, jakbyc podal jakie bledy zglasza Ci kompilator

[#12] Re: MUI vs C++

@Kaczus, post #11

Kaczus napisał(a):

> Chodzi o linie dla c++. Byc moze ich nie
> masz... zreszta latwiej byloby ci cos doradzic,
> jakbyc podal jakie bledy zglasza Ci kompilator

Listing w C++ i błędy podałem w swoim pierwszym poście. Błędy są dwa, a raczej jeden:

RAM:mini.cpp: In function `int main()':
RAM:mini.cpp:22: initialization to `UBYTE *' from `const char *' discards qualifiers

linia 22 to :

if (!(MUIMasterBase = OpenLibrary("muimaster.library", 16)))


... może ktoś roszyfruje o co chodzi w tym errorku generowanym przez GCC, lub ewentualnie o jaki include chodzi (o ile to w ogóle możliwe do zdiagnozowania). Póki co StormC rulez ;)

Pozdrawiam

[#13] Re: MUI vs C++

@MarX, post #12

Listing widzialem, nie zauwazylem tylko, ze byl tez blad wypisany, a
on jednoznacznie wskazuje na to, iz masz nie do końca poprawne includy
systemowe, nie uwzględniają one C++ - w sumie ręcznie możesz dodac:

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

(...)
#ifdef __cplusplus
}
#endif /* __cplusplus */

ewentualnie wygeneruj includy raz jeszcze.

[#14] Re: MUI vs C++

@Kaczus, post #13

Kaczus napisał(a):

> Listing widzialem, nie zauwazylem tylko, ze byl tez blad wypisany, a
> on jednoznacznie wskazuje na to, iz masz nie do końca poprawne includy
> systemowe, nie uwzglćdniają one C++ - w sumie rćcznie możesz dodac:
>
> #ifdef __cplusplus
> extern "C" {
> #endif /* __cplusplus */
>
> (...)
> #ifdef __cplusplus
> }
> #endif /* __cplusplus */

Wybacz, ale nie za bardzo czaje tą magiczną sztuczkę, jaką mi pokazałeś ) Gdzie mam to wpisać w includach (to trzeba klepac przy każdym oddzielnie ?). Sorry za mega lamerię, ale możesz podać jakiś konkretny przykład ?


Pozdrawiam!

[#15] Re: MUI vs C++

@MarX, post #14

Problem jest w tym, ze funkcje systemowe sa w C, natomiast ty chcesz
używać C++, dlatego musisz dać informację kompilatorowi, że są one w C
i żeby tak je traktował... Zajrzyj w dowolny include od C używany w
C++. A najlepiej wygeneruj includy systemowe raz jeszcze...

[#16] Re: MUI vs C++

@Kaczus, post #15

Kaczus napisał(a):

> Problem jest w tym, ze funkcje systemowe sa w C, natomiast ty chcesz
> używać C++, dlatego musisz dać informacjć kompilatorowi, że są one w C
> i żeby tak je traktował... Zajrzyj w dowolny include od C używany w
> C++. A najlepiej wygeneruj includy systemowe raz jeszcze...
>

OK, dzięki za rady.

Pozdrawiam!

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