Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
МихЭдНал
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 12
#1

Вместо переменных окружения -> переменная из командной строки - C++

19.01.2014, 16:12. Просмотров 805. Ответов 13
Метки нет (Все метки)

Короче ребята такое дело, надо переделать так что бы вместо переменных окружения надо что бы вместо переменных окружения программа принимала аргументы командной строки(брала от туда значение переменных).
Но все мои попытки заканчиваются тем, что сборка прошла, а при работе программы я получаю вылет с ошибкой!

Сами коды

3_4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "stdafx.h"
#include <windows.h>    //(Joint) 
#include <stdio.h>  
#include <conio.h>   
int _tmain(int argc, _TCHAR* argv[])
{
  STARTUPINFO si[2];
  memset(&si[0],0,sizeof(si[0]));
  memset(&si[1],0,sizeof(si[1]));
  si[0].cb=sizeof(STARTUPINFO);
  si[1].cb=sizeof(STARTUPINFO);
  PROCESS_INFORMATION pi[2];
  SYSTEMTIME                st;
  FILETIME      ft;                                       
 
  GetLocalTime(&st);
  SystemTimeToFileTime(&st,&ft);
  unsigned __int64 MinTime= (((unsigned _int64)ft.dwHighDateTime)<<32)|ft.dwLowDateTime;
  _tprintf(_T("Start values:\n%x%x\n"),(int)(MinTime>>32),(int)((MinTime<<32)>>32));
 
   TCHAR path[MAX_PATH];
   TCHAR Name[]=_T("2.exe");
   
   BOOL b=CreateProcess(0,Name,0,0,false,0,0,0,&si[0],&pi[0]);
 if(!b)             
   {
     _tprintf(_T("Error create Process Run_NotePad\n"));         return -1;
   }
   WaitForSingleObject(pi[0].hProcess,INFINITE);
 
   TCHAR p[MAX_PATH];
   *((__int64*)p)=MinTime;
 
   SetEnvironmentVariable(_T("TIME"),p);
   TCHAR proc_name[]=_T("3.exe");
   BOOL b1=CreateProcess(0,proc_name,0,0,false,CREATE_SUSPENDED,0,0,&si[1],&pi[1]);
   if(!b1)
   {    
     _tprintf(_T("Error create Process GetFileSize\n"));     return -2;   
   }
   SetPriorityClass(pi[1].hProcess, BELOW_NORMAL_PRIORITY_CLASS);
   ResumeThread(pi[1].hThread);
 
   WaitForSingleObject(pi[1].hProcess,INFINITE);
 
   CloseHandle(pi[0].hProcess);
   CloseHandle(pi[1].hProcess);
   _getch();
  return 0;
}
2.exe

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "stdafx.h"
#include <windows.h>        // (Run_Notpad.exe) 
#include <stdio.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
TCHAR proc_name[]=_T("notepad.exe");
BOOL b=CreateProcess(0,proc_name,0,0,false,0,0,0,&si,&pi);
if (!b)
{
_tprintf(_T("Error no notepad\n"));
     return 1;
}
WaitForSingleObject(pi.hProcess,INFINITE);      
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
_tprintf(_T("After Notepad is closed. Press any key\n"));
 
 _getch();
return 0;
}
3.exe

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <windows.h>    //(GetFileSize.exe)
#include <stdio.h>  
#include <conio.h>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{      
    FILETIME CreateFileTime;
    unsigned __int64 MinTime;
    TCHAR buf[1000];
 
    int dwRet = /*GetEnvironmentVariable(_T("TIME"),*/ _ttoi(argv[1]);
    _tprintf(_T("Environment lenght %d\n"), dwRet);
    GetEnvironmentVariable(_T("TIME"), buf, dwRet);
 
    MinTime=*((__int64 *)buf); 
    _tprintf(_T("Obtained values:\n%x%x\n"),(int)(MinTime>>32),(int)((MinTime<<32)>>32));
 
    HANDLE hFile;
    BOOL b;
    WIN32_FIND_DATA FindFileData;
    TCHAR path[MAX_PATH];
 
    GetCurrentDirectory(MAX_PATH,path);  _tprintf_s(_T("%s\n"),path);
    HANDLE h=FindFirstFile(_T("*.txt"),&FindFileData);
    if (h==INVALID_HANDLE_VALUE)_tprintf(_T("Template File not found\n"));
    else
    { 
        while (1)               
        {   
            CreateFileTime=FindFileData.ftCreationTime;
            FileTimeToLocalFileTime(&CreateFileTime,&CreateFileTime);
            unsigned _int64 i64CreateFileTime= 
                (((unsigned _int64) CreateFileTime.dwHighDateTime)<<32)|CreateFileTime.dwLowDateTime;
            if (i64CreateFileTime>MinTime )
            {
                hFile=CreateFile (FindFileData.cFileName,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
                DWORD len,high;
                _tprintf(_T("%s \n"),FindFileData.cFileName);
                len=GetFileSize( hFile,&high);
                _tprintf(_T("%d\n"),len);
                CloseHandle(hFile);
            }
            b=FindNextFile(h,&FindFileData);
            if (!b)
            {   
                _tprintf(_T("All files are over\n"));  
                break;
            }
        }       
    }//else
    //_getch();
    return 0;
}
Очень прошу помочь, чувствую что рядом но не получается сделать нормально!

Добавлено через 21 час 33 минуты
Ну может кто то поможет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 16:12     Вместо переменных окружения -> переменная из командной строки
Посмотрите здесь:

Как выводить переменные окружения и аргументы командной строки? - C++
Доброго времени суток) Может рассказать как выводить переменные окружения и аргументы командной строки? Задание звучит примерно так:...

Переменная окружения PATH - C++
напишите пожалуйста как будет выглядеть прога которая дополняет значение PATH именем каталога, указанным в командной строке Пишу на С.

Переменная czBankNumber не инициализируется? вместо значений квадратики 2 шт и все - C++
Инициализация находится в функции-члене void setBunkNumber(); #include &lt;iostream&gt; #include &lt;cstdlib&gt; class cAccount{ public: ...

Аргументы командной строки - C++
Здравствуйте, у меня вопрос, почему программа сбрасывается, так и не выполнив никаких действий? Я знаю , что она возвращает 0 и выходит,...

Аргументы командной строки - C++
int main(int argc,int **argv) Понял только,что argc отвечает за количество аргументов,а argv-массив указателей на строки символов.Но...

Задержка командной строки - C++
При нажатии кнопки на форме Билдера открывается командная строка, пингует айпишник и тут же закрывается. Как мне ее задержать, чтобы я...

Аргументы командной строки - C++
Есть прога, которая считывает файл посимвольно и выводит количество повторений символов в консоль. Открытие файла происходит так: FILE...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 16:25     Вместо переменных окружения -> переменная из командной строки #2
Параметры командной строки можно получить через массив argv. Кол-во параметров - argc.
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using namespace std;
 
 
int main(int argc, char* argv[])
{
    //Вывод параметров командной строки
    for (int i=0; i<argc; i++)
        cout << argv[i]<<endl;
    return 0;
}
МихЭдНал
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 12
19.01.2014, 16:28  [ТС]     Вместо переменных окружения -> переменная из командной строки #3
C++
1
 int dwRet = /*GetEnvironmentVariable(_T("TIME"),*/ _ttoi(argv[1]);
Делал, получаю ошибку!
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 16:28     Вместо переменных окружения -> переменная из командной строки #4
Вот пример вызова этой программы:
Название: Снимок.PNG
Просмотров: 99

Размер: 1.4 Кб

Соответственно все эти параметры можно записать в переменные
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
19.01.2014, 16:29     Вместо переменных окружения -> переменная из командной строки #5
Я нашел только одно использование argv во всем этом коде. Может быть у тебя просто argc==0? Ну или я не так понял вопрос(что немудрено, ибо описание ошибки мягко говоря туманно, по кр. мере для меня)
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
19.01.2014, 16:47     Вместо переменных окружения -> переменная из командной строки #6
Цитата Сообщение от МихЭдНал Посмотреть сообщение
Короче ребята такое дело, надо переделать так что бы вместо переменных окружения
а как ты находишь блок переменных окружения или какую-нибудь одну переменную окружения? Я, насколько знаю, для этого используется функция GetEnvironmentStrings, а у тебя её нет.

Добавлено через 4 минуты
Ещё можно получить адрес блока переменных окружения через командную строку,

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(int argc, char ** argv, char ** envp)
{
        while ( *envp )
                puts(*envp++);
 
 getchar();
 getchar();
        return 0;
}
но ты и этот вариант не используешь.

Переделывать-то что? С нуля, похоже, писать надо.
МихЭдНал
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 12
19.01.2014, 16:47  [ТС]     Вместо переменных окружения -> переменная из командной строки #7
argc!=0.

Вместо переменных окружения -> переменная из командной строки

Ошибка

Вместо переменных окружения -> переменная из командной строки
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 16:55     Вместо переменных окружения -> переменная из командной строки #8
У меня этот код работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    //Вывод параметров командной строки
    int dwRet = _ttoi(argv[1]);
    cout <<" dwRet="<<dwRet<<endl;   
 
    return 0;
}
Вот вызов:
Вместо переменных окружения -> переменная из командной строки
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 16:57     Вместо переменных окружения -> переменная из командной строки #9
Цитата Сообщение от МихЭдНал Посмотреть сообщение
Может потому что ты запускаешь из студии и не передаешь ни каких параметров из командной строки?
МихЭдНал
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 12
19.01.2014, 17:06  [ТС]     Вместо переменных окружения -> переменная из командной строки #10
Так я в Студии прописываю что передать как команду строки!

Добавлено через 6 минут
Та и через командную строку ничего не меняет!
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.01.2014, 17:46     Вместо переменных окружения -> переменная из командной строки #11
а дебагом пользоваться умеете?
в http://img-fotki.yandex.ru/get/9758/...56fbcb52_L.jpg
жмете повтор. попадаете в место развала. далее по стеку вызовом попадаете в место
своего кода, откуда был кривой вызов. смотрите на переменные, чего там и как.
мой стандартный совет, хоть и не по теме: освойте студийный дебагер, раз работаете в ней.
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 19:50     Вместо переменных окружения -> переменная из командной строки #12
Через студию у меня тоже работает)

Вместо переменных окружения -> переменная из командной строки
МихЭдНал
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 12
19.01.2014, 21:53  [ТС]     Вместо переменных окружения -> переменная из командной строки #13
Если взять отдельно перевод работает, а если как вся прога?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 21:56     Вместо переменных окружения -> переменная из командной строки
Еще ссылки по теме:

Чтение из командной строки - C++
всем привет!такая проблема,вот таким образом обрабатываю командную строку : sscanf_s((char*)lpCmdLine,&quot;%i %i %i %i %i&quot;, &amp;q, &amp;j, &amp;k, &amp;l,...

Параметр командной строки - C++
Здрасте, здрасте!! Вопрос такой есть код: LPWSTR *szArglist; int nArgs; int i; LPWSTR temp=L&quot;/i&quot;; szArglist =...

использование командной строки - C++
Объясните, пожалуйста, как через аргументы командной строки скопировать файл в файл?

аргементы командной строки - C++
ПОдскажите, как через аргументы командной строки вывести {1 2 3 4 5} в файл по блочно из массива?

Использование командной строки - C++
У меня есть файл по адресу D:/Faylik/data.txt и его нужно скопировать с помощью командной строки в файл D:/F/data2.txt . Подскажите, плиз,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
19.01.2014, 21:56     Вместо переменных окружения -> переменная из командной строки #14
Тогда ошибка в другом месте) и дело не в получении параметров из командной строки.
Yandex
Объявления
19.01.2014, 21:56     Вместо переменных окружения -> переменная из командной строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru