Я передаю некоторые числовые аргументы при создании процесса (в VC++)LPTSTR к Int (C++)
я застрял при преобразовании LPTSTR в целое.
Заранее спасибо.
Я передаю некоторые числовые аргументы при создании процесса (в VC++)LPTSTR к Int (C++)
я застрял при преобразовании LPTSTR в целое.
Заранее спасибо.
LPTSTR - это всего лишь длинный указатель на строчку char или широкоугольную строку.
Использовать _ttoi
или _tstoi
для использования атрибута ширины-агностики.
Также см
Попробуйте функцию atoi()
(или соответствующую версию, если вы используете широкие символы), чтобы преобразовать строки в целые числа.
Что делать, если это широкий символ? Тогда вам придется использовать wtoi(). –
У этого окна нет «_tcatoi» или как его зовут? –
Да, они _ttoi и _tstoi. –
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
Мой совет должен был бы использовать что-то вроде _tcstol, а не _ttoi, так что вы можете обрабатывать условия возникновения ошибок, таких как не-цифр в строке. Например:
int result = atoi("0");
result = atoi("foo");
В обоих случаях результат будет равен 0, но только во втором случае возникает ошибка в преобразовании.
Gack! Что именно ты пытаешься сделать? Является ли ваша проблема на стороне родительского процесса (который вызывает CreateProcess()
) или на стороне дочернего процесса?
Существует несколько способов передачи параметров из родительского процесса в дочерний процесс, созданный функцией CreateProcess()
. Если вы можете кодировать эти параметры как строку с разумным размером, то передача их через параметры командной строки (параметр lpCommandLine
CreateProcess), вероятно, является наиболее простой переносной & с переменными окружения 2nd.
Если у вас есть структура данных, вы не можете кодировать строку с достаточным размером (либо потому, что это большой объем памяти, либо ее нелегко сериализовать), тогда вам нужно прибегнуть к некоторому методу межпроцессного общения. Файл или блок разделяемой памяти - два способа сделать это.В любом случае вам нужно найти согласованное местоположение для этого ребенка (путь к файлу в случае файла или имя блока разделяемой памяти), а затем передать эту строку в качестве командной строки параметр или переменная среды.
Если вы пытаетесь проанализировать параметр lpCommandLine
в дочернем процессе, то это то, что предложили другие люди.
Пожалуйста, не называйте это «casting» - это преобразование, а не литье – Arkadiy
Можете ли вы опубликовать вызов, который дает вам проблемы? Вы не даете понять, почему вы перебрасываете LPTSTR в int. Это аргумент для CreateProcess()? –
Не говоря уже о том, где ваш вопрос? Выражение вашего вопроса в форме вопроса часто дает полезную информацию тем, кто может ответить. –