Страниц: [1]
  Печать  
Автор Тема: Параметры запуска argc, argv  (Прочитано 6943 раз)
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« : Апреля 21, 2008, 08:30:12 pm »

Как известно для приложений собранных в PhAB'е уже предопределены некоторые ключи запуска, такие как :
  -s server   Server node or device name
  -x x        Initial x position
  -y y        Initial y position
  -h h        Initial h dimension
  -w w        Initial w dimension.
И, насколько я понимаю, используются они в функции ApInitialize( argc, argv ) файл abmain.c

Хотелось бы знать можно ли от этого избавиться, и если да, то как. То есть, например, чтобы ключик "-s" не влиял на выбор фотоновского сервера, а программа всегда запускалась в текущем фотоне.

QNX 4.25, Photon 1.14
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #1 : Апреля 21, 2008, 08:49:52 pm »

В QNX6.3.2:
PhAB->Project->Properies...(F2)->Generate Options
Enable *** Arguments

Где в четверке не помню...
Записан

Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #2 : Апреля 22, 2008, 01:34:10 pm »

В окне "Application Startup Information" (F2) есть опции:
- No Pos Arg, (отменяет действие ключей -x, -y)
- No Dim Arg, (отменяет действие ключей -w, -h)
- No State Arg (отменяет действие ключя -S (большое))

а вот для -s (маленькое) выбор фотоновского сервера настроек нет
Записан
AlexDon
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #3 : Апреля 22, 2008, 02:13:07 pm »

В окне "Application Startup Information" (F2) -> Initialization Function
назначьте функцию

Например:

init_arg(int argc, char *argv[]) {
  while (getopt(argc,argv,"s"!=-1) {
    ...
  }
}
Записан
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #4 : Апреля 22, 2008, 02:32:06 pm »

alexdon
В окне "Application Startup Information" (F2) -> Initialization Function
назначьте функцию


Так и сделано. Но, как я уже говорил выше, -s не перегрузить. Если можно так выразиться. Попробуйте сами задать на выполнение с -s<num>, где <num> - номер несуществующего узла. Выполнение программы в таком случае заканчивается на ApInitialize() не доходя до пользовательской init-функции.
Записан
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #5 : Апреля 22, 2008, 02:54:20 pm »

Как выяснилось загвоздка была в том, что я вызывал
getopt( argc, argv, ApOptions );

и ключи прописывал ранее в ApOptions. Т.е.
const char ApOptions[] = "s:";

ApInitialize() как раз опирается на ApOptions. Стоило всего лишь обнулить ApOptions[] = ""; и в пользовательской init-функции использовать getopt( argc, argv, "s:" );
то есть явно задавать строку, а не ссылаться на ApOptions. И всё заработало как надо.

Проблема решена. Спасибо за участие
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #6 : Апреля 22, 2008, 04:00:37 pm »

Absolut
Стоило всего лишь обнулить ApOptions[] = ""; и в пользовательской init-функции использовать getopt( argc, argv, "s:" );
то есть явно задавать строку, а не ссылаться на ApOptions. И всё заработало как надо.

Поздно я залез в тему - помню, что именно с этим я тоже как-то прободался... и именно таким и было решение: не пользовать ApOptions.
(об этой особенности, кстати, в HELP - ни слова ... я, по крайней мере не нашёл).
Записан
AlexDon
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #7 : Апреля 23, 2008, 03:38:53 pm »

В 6-ке вроде есть.
Записан
olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #8 : Апреля 23, 2008, 04:47:54 pm »

alexdon
В 6-ке вроде есть.

в описании?
- есть как раз много об ApOptions[] и о его использовании ... хотя оно как раз мало интересно
- а вот о том, чтобы ихний ApOptions[] обнулить нахрен ;(, и пользовать свою собственную строку опций - нет ни слова
Записан
Страниц: [1]
  Печать  
 
Перейти в: