Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Два приложения по очереди \ Null

3.0K
01 сентября 2003 года
Irinad
16 / / 14.08.2003
Привет! Подскажите, пожалуйста, как запустить из программы два приложения по очереди( т.е. дождаться окончания одного, потом запустить второе). Первое приложение запускаю с помощью CreateProcess.
И ещё, как узнать, что поле содержит Null.
Пробовала
if (DM1->Q2->FieldByName["Adr"]->AsString=="")
ShowMessage("Есть Null!");
-не получается.
Спасибо всем, кто сможет помочь.
293
01 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
1. Используй функцию spawn
вот например
spawnlp(P_WAIT,e.c_str(), e.c_str(), h.c_str(), NULL);
где e - путь к ЕХЕ программы
h - ключи
2.
if (DM1->Q2->FieldByName["Adr"]->AsString.Legth()==0) ShowMessage("Есть Null!");
3
01 сентября 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Irinad
Привет! Подскажите, пожалуйста, как запустить из программы два приложения по очереди( т.е. дождаться окончания одного, потом запустить второе). Первое приложение запускаю с помощью CreateProcess.
И ещё, как узнать, что поле содержит Null.
Пробовала
if (DM1->Q2->FieldByName["Adr"]->AsString=="")
ShowMessage("Есть Null!");
-не получается.
Спасибо всем, кто сможет помочь.



По поводу процессов смотри WaitForSingleObject.

429
01 сентября 2003 года
Slon
78 / / 20.01.2000
Например:
Код:
//запуск первой программы через CreateProcess, ожидание завершения
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
if(!CreateProcess(0,                             // No module name (use command line).
                  "c:\\WINNT\\NOTEPAD.EXE",   // Command line.
                  0,                 // Process handle not inheritable.
                  0,                 // Thread handle not inheritable.
                  false,             // Set handle inheritance to FALSE.
                  0,                 // No creation flags.
                  0,                 // Use parent's environment block.
                  0,                 // Use parent's starting directory.
                  &si,               // Pointer to STARTUPINFO structure.
                  &pi ))             // Pointer to PROCESS_INFORMATION structure.
    {
    ShowMessage("CreateProcess failed");
    return;
    }
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

//запуск второй программы через ShellExecute
ShellExecute(NULL, "", "c:\\WINNT\\regedit.exe", NULL, NULL, 0);


P.S. Последний параметр у CreateProcess - указатель на переменную типа PROCESS_INFORMATION (как и в комментарии). Просто броузер неверно отображает.
2.1K
01 сентября 2003 года
maximaximax
83 / / 05.06.2003
Цитата:
Originally posted by Irinad
Привет! Подскажите, пожалуйста, как запустить из программы два приложения по очереди( т.е. дождаться окончания одного, потом запустить второе). Первое приложение запускаю с помощью CreateProcess.
И ещё, как узнать, что поле содержит Null.
Пробовала
if (DM1->Q2->FieldByName["Adr"]->AsString=="")
ShowMessage("Есть Null!");
-не получается.
Спасибо всем, кто сможет помочь.



По воводу NULL в поле:
if (DM1->Q2->FieldByName["Adr"]->IsNull)
ShowMessage("Есть Null!");

3.0K
02 сентября 2003 года
Irinad
16 / / 14.08.2003
Спасибо тем, кто ответил.
С приложениями теперь проблем нет, а с Null остались.
У меня есть такая процедура:

if(DM1->Q5->FieldValues["Adress"]->AsString.Length()==0)
AnsiString str="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe";
else
AnsiString str="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe "+ DM1->Q5->FieldValues["Adress"];
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
CreateProcess(NULL, str.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

при компиляции выдает кучу ошибок, в том числе в других частях программы.
Если убрать проверку на Null - все работает (используя IsNull-то же самое).
Кто-нибудь знает, что это может быть?
293
02 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
Вместо if(DM1->Q5->FieldValues["Adress"]->AsString.Length()==0)
попробуй написать
[COLOR=darkblue]if(DM1->Q5->FieldByName("Adress")->AsString.Length() == 0)[/COLOR]
3.0K
03 сентября 2003 года
Irinad
16 / / 14.08.2003
Цитата:
Originally posted by SEDEGOFF
Вместо if(DM1->Q5->FieldValues["Adress"]->AsString.Length()==0)
попробуй написать
[COLOR=darkblue]if(DM1->Q5->FieldByName("Adress")->AsString.Length() == 0)[/COLOR]




Пробовала - всё по-прежнему.

293
03 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
А что за ошибки?
3.0K
03 сентября 2003 года
Irinad
16 / / 14.08.2003
Цитата:
Originally posted by SEDEGOFF
А что за ошибки?



Undefined symbol 'str' // строка, задающая путь в CreateProcess
Ambiguity between '_fastcall Variant::operator bool() const' and ''_fastcall Variant::operator__int64() const'
Ambiguity between '_fastcall Variant::operator float() const' and ''_fastcall Variant::operator double() const'

Последние два сообщения относятся к строке
DM1->Q5->Filter = "old" + " = '" + DM1->Q1->FieldValues["OLD"] + "'";
которая находиться в другой процедуре, осуществляющей фильтр записей в наборе Q5 с номером("old"), совпадающим со значением поля "OLD" активной записи Q1.
Но как это связано с проверкой на Null не могу понять.

293
03 сентября 2003 года
SEDEGOFF
586 / / 06.10.2002
Цитата:
Originally posted by Irinad


Undefined symbol 'str' // строка, задающая путь в CreateProcess
Ambiguity between '_fastcall Variant::operator bool() const' and ''_fastcall Variant::operator__int64() const'
Ambiguity between '_fastcall Variant::operator float() const' and ''_fastcall Variant::operator double() const'

Последние два сообщения относятся к строке
DM1->Q5->Filter = "old" + " = '" + DM1->Q1->FieldValues["OLD"] + "'";
которая находиться в другой процедуре, осуществляющей фильтр записей в наборе Q5 с номером("old"), совпадающим со значением поля "OLD" активной записи Q1.
Но как это связано с проверкой на Null не могу понять.



Ты str объявляешь в if и при выходе из if str уничтожаеться. Поэтому объяви str до всех if

[COLOR=darkblue]
AnsiString str;
if(DM1->Q5->FieldValues["Adress"]->AsString.Length()==0)
str="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe";
else
str="C:\\Program Files\\Windows NT\\Accessories\\ImageVue\\kodakimg.exe "+ DM1->Q5->FieldValues["Adress"];
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
CreateProcess(NULL, str.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
[/COLOR]

Замени и скажи какие ошибки

3.0K
03 сентября 2003 года
Irinad
16 / / 14.08.2003
Цитата:
Originally posted by SEDEGOFF


Ты str объявляешь в if и при выходе из if str уничтожаеться. Поэтому объяви str до всех if


Замени и скажи какие ошибки




А ошибок больше нет!:)
Большое спасибо за помощь.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог