2009-02-02 2 views
3

Я передаю некоторые числовые аргументы при создании процесса (в VC++)LPTSTR к Int (C++)

я застрял при преобразовании LPTSTR в целое.

Заранее спасибо.

+1

Пожалуйста, не называйте это «casting» - это преобразование, а не литье – Arkadiy

+0

Можете ли вы опубликовать вызов, который дает вам проблемы? Вы не даете понять, почему вы перебрасываете LPTSTR в int. Это аргумент для CreateProcess()? –

+0

Не говоря уже о том, где ваш вопрос? Выражение вашего вопроса в форме вопроса часто дает полезную информацию тем, кто может ответить. –

ответ

1

Попробуйте функцию atoi() (или соответствующую версию, если вы используете широкие символы), чтобы преобразовать строки в целые числа.

+0

Что делать, если это широкий символ? Тогда вам придется использовать wtoi(). –

+0

У этого окна нет «_tcatoi» или как его зовут? –

+0

Да, они _ttoi и _tstoi. –

-1

LPTSTR является указателем на строку, так что вы не должны бросить его в междунар если то, что вы хотите, это ИНТ, представляющее значение строки.

Если вы знаете, что строка содержит цифры, например. «1234» вы должны использовать функцию _wtoi для преобразования ее в int

например.

int num = _wtoi (foo);

где foo - это LPTSTR.

Редактировать: Вышеупомянутое работает только в том случае, если LPTSTR является строкой UNICODE. то есть _UNICODE. Если это не так, вы должны использовать atoi.

См http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

1

Мой совет должен был бы использовать что-то вроде _tcstol, а не _ttoi, так что вы можете обрабатывать условия возникновения ошибок, таких как не-цифр в строке. Например:

int result = atoi("0"); 
result = atoi("foo"); 

В обоих случаях результат будет равен 0, но только во втором случае возникает ошибка в преобразовании.

2

Gack! Что именно ты пытаешься сделать? Является ли ваша проблема на стороне родительского процесса (который вызывает CreateProcess()) или на стороне дочернего процесса?

Существует несколько способов передачи параметров из родительского процесса в дочерний процесс, созданный функцией CreateProcess(). Если вы можете кодировать эти параметры как строку с разумным размером, то передача их через параметры командной строки (параметр lpCommandLine CreateProcess), вероятно, является наиболее простой переносной & с переменными окружения 2nd.

Если у вас есть структура данных, вы не можете кодировать строку с достаточным размером (либо потому, что это большой объем памяти, либо ее нелегко сериализовать), тогда вам нужно прибегнуть к некоторому методу межпроцессного общения. Файл или блок разделяемой памяти - два способа сделать это.В любом случае вам нужно найти согласованное местоположение для этого ребенка (путь к файлу в случае файла или имя блока разделяемой памяти), а затем передать эту строку в качестве командной строки параметр или переменная среды.

Если вы пытаетесь проанализировать параметр lpCommandLine в дочернем процессе, то это то, что предложили другие люди.

 Смежные вопросы

  • Нет связанных вопросов^_^