LPTSTR в int (c ++) - PullRequest
       35

LPTSTR в int (c ++)

3 голосов
/ 02 февраля 2009

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

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

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

Ответы [ 5 ]

12 голосов
/ 02 февраля 2009

LPTSTR - это просто длинный указатель на строку типа char или wide-char.

Используйте _ttoi или _tstoi для независимого от ширины символа способа преобразования.

Также см.

2 голосов
/ 03 февраля 2009

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

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

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

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

1 голос
/ 03 февраля 2009

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

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

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

1 голос
/ 02 февраля 2009

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

0 голосов
/ 02 февраля 2009

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

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

например.

int num = _wtoi (foo);

, где foo - это LPTSTR.

edit: вышеописанное работает правильно, только если LPTSTR является строкой UNICODE. т.е. _UNICODE определен. Если это не так, вы должны использовать Atoi.

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

...