2010-07-20 25 views
5

Próbuję utworzyć aplikację na Maca, która powinna zwrócić kod błędu w niektórych przypadkach. To jest pakiet Intela. (Jest to projekt Carbon C++, ale jest to prawdopodobnie nieistotne.)Kod powrotu z aplikacji Mac:

Standardowym sposobem na zrobienie tego w C++ byłaby funkcja zwracająca wartość, i to właśnie robię, więc myślę, że część jest poprawna . (Próbowałem również jednoznacznie wywoływać exit(42))

Pytanie brzmi: jak uzyskać tę wartość?

Gdy uruchamiam aplikację z terminala pod numerem open myapp, zwracana jest zawsze wartość 0, nawet jeśli zawsze zwracam inną liczbę. (sprawdzane przy użyciu echo $?)

Czy jest to wartość zwracana przez otwarte polecenie i czy wartość zwracana przez moją aplikację jest gdzieś połknięta?

Zawsze otrzymuję kod powrotu 0, jeśli uruchomię go z innego programu przy użyciu execve (w ten sposób aplikacja jest przeznaczona do użycia).

Czy można odzyskać kod powrotu z aplikacji?

Sidenote: Potrzebuję programu, żeby był w pakiecie.

Odpowiedz

2

myślę, że prawdopodobnie trzeba wykonać binarny aplikacji bezpośrednio, tj drążyć wiązki jak ten:

$ /Applications/Address\ Book.app/Contents/MacOS/Address\ Book

+0

Robię to. To nie pomaga. – darklon

+1

Istnieje różnica między 'open your.app' i wykonywanie' your.app/Contents/MacOS/yourApp'. Ten pierwszy nie podaje kodu powrotu aplikacji, ale drugi robi. Tak napisał Paweł. – Yuji

+0

Zrozumiałem i to był dobry pomysł. W rzeczywistości tylko ten ostatni wydaje się działać z execve(), ale kod powrotu nie pojawia się, otrzymuję 0, gdy czekam na proces z wait(), nie to, co zwróciłem z exit(). Próbowałem też z terminalem, i tam też dostałem 0. – darklon

1

Prawdopodobnie nie mogę tego zrobić, ponieważ głównym zwróci NSApplicationMain() obiektu . Koniec programu jest określany przez użytkownika, gdy użytkownik kliknie przycisk "zakończ".

Możesz jednak użyć metody, aby zrobić to, co chcesz.

+0

Problem już występuje bez tworzenia obiektu NSApplicationMain. Wartość zwracana przez prawie nic nie działająca aplikacja już wydaje się zagubiona. Ponadto wywołanie exit (value) nie rozwiązuje wprost problemu. – darklon

+0

Nie ma również sposobu na określenie kodu powrotu w applicationWillTerminate (jeśli tak, to mogłoby wyjaśnić, skąd pochodzi wartość zwracana przez 0). Nie powinno to czynić żadnej różnicy, czy wywołuję exit() z applicationWillTerminate, czy gdziekolwiek indziej w kodzie - mimo że mógłbym spróbować, dzięki za pomysł! – darklon

+0

Btw. NSApplicationMain jest w rzeczywistości funkcją, a nie klasą. I tam jest grosz - nigdy się nie zwraca. Ale to nie jest problem. – darklon

Powiązane problemy