Visual C++ FAQ
Страница 10.


21. Как сделать глобальную переменную, доступной всем моим файлам .CPP?

Для начала, в одном из файлов .CPP (и только одном) объявите переменную, которая будет глобальной (то есть за пределами всех функций и классов). Например:

 int g_volume;

Затем, в заголовочном файле, который будет включён во все файлы .CPP - такой как stdafx.h - добавьте объявление extern:

 extern int g_volume;

Ключевое слово extern указывает компилятору, что g_volume объявлена в других файлах .CPP как int. Если Вы пропустите первый шаг, то компилятор выдаст unresolved external error.

 

22. У меня есть строка, которая является представлением числа, скажем "10235". Как преобразовать её в integer?

Используйте функции atoi() или atol() , либо если число с плавающей точкой, то , atof():

char* szNumber = "10235";
int iNum = atoi ( szNumber ); // integer
long lNum = atol ( szNumber ); // long integer
double dNum = atof ( szNumber ); // floating-point

 

23: Как из моего приложения запустить другую программу?

Существует несколько функций, позволяющих запускать другие программы. Самая простая - WinExec():

 WinExec ( "C:\\path\\to\\program.exe", SW_SHOWNORMAL );

Так же существует функция ShellExecute(), которая может запускать как экзешники, так и файлы, связанные с приложениями. Например, можно "запустить" текстовый файл, как показано ниже:

 ShellExecute ( hwndYourWindow, "open", "C:\\path\\to\\readme.txt",
NULL, NULL, SW_SHOWNORMAL );

В данном примере, ShellExecute() ищет приложение, связанное с файлами .TXT и запускает его. ShellExecute() также позволяет устанавливать начальную директорию для приложения, а так же дополнительные параметры командной строки. За более подробным описанием функции рекомендую лезть в MSDN.

Если Вам необходимо полностью контролировать запущенное приложение, то необходимо использовать CreateProcess(). CreateProcess() имеет кучу параметров, поэтому детальное описание функции опять же смотрите в MSDN. А здесь приведу только простой пример:

STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi = {0};
BOOL bSuccess;

bSuccess = CreateProcess ( NULL, "\"C:\\Program Files\\dir\\program.exe\"",
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
NULL, NULL, &si, &pi );

Обратите внимание, что если имя программ содержит пробелы, то его необходимо заключить в кавычки, как показано выше.

Если CreateProcess() выполнена успешно, то удостоверьтесь, что дескрипторы в структуре PROCESS_INFORMATION закрыты, так как они нам больше не понадобытся.

 CloseHandle ( pi.hThread );
CloseHandle ( pi.hProcess );

Конечно же, если всё, что Вам нужно, это просто запустить программу, то необходимость в CreateProcess() отпадает, а вот ShellExecute() будет в самый раз.

 
« Предыдущая статья