2010-07-20 17 views
5

Bazı durumlarda bir hata kodu döndürmesi gereken bir Mac uygulaması oluşturmaya çalışıyorum. Bu bir Intel paketidir. (Bu bir Carbon C++ projesi, ancak bu muhtemelen ilgisizdir.)Mac uygulamasından dönüş kodu

C++ uygulamasında bunu yapmanın standart yolu, ana işlevin değeri döndürmesidir ve yaptığım şey budur, bu yüzden parçanın doğru olduğunu düşünüyorum . (Ayrıca açık bir şekilde exit(42)'u aramayı denedim)

Sorun şu: Bu değere nasıl ulaşırım? Uygulamayı open myapp numaralı terminalden başlattığımda, her zaman farklı bir numara döndürsem bile dönüş değeri her zaman 0 olur. (echo $? numaralı telefonu kullanarak kontrol edin)

Bu, dönüş komutundaki dönüş değeri mi? Uygulamamın dönüş değeri bir yerde yutuluyor mu?

execve'u kullanarak başka bir programdan başlattığımda her zaman bir 0 dönüş kodu alıyorum (bu, uygulamanın nasıl kullanılacağıdır).

Bir uygulamadan bir iade kodu almak mümkün mü?

Sidenote: Programın bir paket içinde olmasına ihtiyacım var.

cevap

2

ben muhtemelen böyle demet halinde detaya yani doğrudan uygulama ikili çalıştırmak için gereken düşünüyorum:

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

+0

Bunu yapıyorum. Bu yardımcı olmuyor. – darklon

+1

'your.app' açıp' your.app/Contents/MacOS/yourApp' komutunu yürütmek arasında bir fark var. Eski uygulama geri dönüş kodunu vermez, ancak ikincisi yapar. Paul böyle yazdı. – Yuji

+0

Anladım ve bu iyi bir fikirdi. Aslında sadece ikincisi execve() ile çalışır gibi görünüyor, ancak dönüş kodu gelmiyor gibi görünmüyor, ben beklemeyle(), ben exit() ile döndürdüğüm sürece için beklediğimde 0 olsun. Terminal ile de denedim ve bende 0 tane var. – darklon

1

Muhtemelen yapamaz, senin dönecektir ana bir NSApplicationMain() nesne olarak . Programın sonu, bir "çık" düğmesine tıklamayı seçtiğinde kullanıcı tarafından belirlenir. Bununla birlikte, ne yapmak istediğinizi yapmak için applicationWillTerminate yöntemini kullanabilirsiniz.

+0

Sorun zaten bir NSApplicationMain nesnesi oluşturmadan gerçekleşir. Hemen hemen hiçbir şey yapmayan birimin dönüş değeri zaten kaybolmuş gibi görünüyor. Çıkış (değer) çağrısı sorunu açıkça çözmez. – darklon

+0

Ayrıca uygulamaWillTerminate içinde bir dönüş kodu belirtmek için bir yolu görünmüyor (eğer, 0 döndürme değerinin nereden geldiğini açıklayabilirdi). Ben appWillTerminate veya kod başka bir yerde exit() çağrısı olup olmadığını herhangi bir fark yapmamalı - Ben bu bir deneyin bir deneyin olabilir, bu fikir için teşekkürler! – darklon

+0

Btw. NSApplicationMain aslında bir işlev değil, bir sınıftır. Ve orada bir gotcha var - asla geri dönmez. Ama buradaki sorun bu değil. – darklon