0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
1 | |
Как из string получить LPCTSTR?10.11.2016, 01:53. Просмотров 5223. Ответов 12
Метки нет Все метки)
(
0
|
|
10.11.2016, 01:53 | |
Не существует подходящей функции для преобразования из std::string в LPCTSTR Как преобразовать std::string в LPCTSTR? String^ to LPCTSTR Как из unordered_map<string, string> получить значение по ключу |
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
|
10.11.2016, 02:22 | 2 |
Это зависит от того, что скрывается за
LPCTSTR . Когда это LPCSTR - легко, а когда это LPCWSTR , то придется повозиться.Откуда и зачем у вас вообще взялось LPCTSTR и нужно ли оно вам? Вот на этот вопрос надо бы сначала ответить.
0
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
10.11.2016, 02:30 [ТС] | 3 |
TheCalligrapher,
string a = "c:"; if (GetDriveType(a(?)) == DRIVE_FIXED) Добавлено через 44 секунды if (GetDriveType((LPCTSTR)diski[0].c_str()) == DRIVE_FIXED) а по другому можно? и какой лучше вариант?
0
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
||||||
10.11.2016, 02:33 | 4 | |||||
Если ваша программа всегда будет компилироваться только в режиме "обычных" символов, т.е.
LPCTSTR всегда будет просто LPCSTR (что есть const char * ), то тогда просто
0
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
10.11.2016, 02:49 [ТС] | 5 |
TheCalligrapher, пишет что const char* несовместим с параметром LPCWSTR
0
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
||||||
10.11.2016, 03:03 | 6 | |||||
Это говорит о том, что вы компилируете свою программу в режиме UNICODE. Тут уж вы сами сначала определитесь, что именно вы хотите получить.
Либо продолжайте компилироваться в UNICODE, но тогда прекратите пользоваться string , а используйте wstring
string .
0
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
10.11.2016, 03:27 [ТС] | 7 |
TheCalligrapher, тупенький вопрос: если я включу получившийся exe на другом компе с дугой системой, она же сработает правильно, так?
и можно как нибудь универсально?
0
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
|
10.11.2016, 03:57 | 8 |
Во-первых, нет.
Во-вторых, не совсем ясно, о каком "получившемся exe" идет речь. Однако если ваш вариант из поста #3 с насильным приведением к LPCTSTR не работатет, то работать он не будет нигде.
0
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
10.11.2016, 05:42 [ТС] | 9 |
TheCalligrapher, оказывается он не работает
а есть способ сделать универсальный способ?
0
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
||||||
10.11.2016, 06:47 | 10 | |||||
![]() Решение
"Универсальный" способ чего? И "универсальный" по отношению к чему?
Если exe работает, то от будет работать везде (разумеется, не выходя за рамки конкретной ОС). Поэтому компилируйте в режиме UNICODE, получайте exe и используйте его где угодно. Вот и вся универсальность. А если вам зачем-то захотелось универсальности на стадии компиляции (между версией с обычными символами и UNICODE), то вся эта каша с буквой T в названиях типов именно на то и ориентирована. Везде все надо будет делать через T-типы и Т-функции. Вместо char везде использовать TCHAR . Все строковые литералы записывать как _T("Hello World") . Вместо sprintf везде использовать _stprintf . Явно пользоваться string или wstring нельзя, а надо будет сделать
tstring . И так далее, и тому подобное.
2
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
11.11.2016, 02:41 [ТС] | 11 |
TheCalligrapher, спасибо)
Добавлено через 12 часов 25 минут TheCalligrapher, а давайте добьем тему) c const понятно теперь, а как из string получить LPSTR? ну и из wstring - LPWSTR
0
|
С чаем беда...
![]() ![]() 8027 / 3918 / 1082
Регистрация: 18.10.2014
Сообщений: 8,405
|
|
11.11.2016, 03:09 | 12 |
![]() Решение
В этой области спецификация
stirng/wstring постоянно меняется и я уж не знаю, к чему все это придет. Можно получить указатель на начало строки как &str[0] . Стандарт гарантирует, что строка хранится непрерывно. Однако в С++14 нет прямой гарантии, что завершающий '\0' хранится непрерывно с основной строкой. Но в то же время требуется, чтобы c_str() и data() выполнялись за константное время, что как бы неявно обязывает хранить завершающий '\0' непрерывно. (С++17 вроде будет это гарантировать)Поэтому модифицировать строку через LPSTR/LPWSTR , полученный как &str[0] , вроде бы и можно, пока не делается попытки модифицировать завершающий '\0' . И при этом надо помнить, что помещение в середину строки значения '\0' не будет автоматически влиять на str.size() .В общем я бы пока не совался грязными руками в строку через LPSTR/LPWSTR . Лучше используйте посторонний буфер для LPSTR/LPWSTR , а потом присваивайте его в строку.
1
|
0 / 0 / 0
Регистрация: 12.04.2016
Сообщений: 75
|
|
11.11.2016, 04:41 [ТС] | 13 |
TheCalligrapher, спасибо)
0
|
11.11.2016, 04:41 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. int->LPCTSTR && char->LPCTSTR
как преобразовать из ULONGLONG в LPCTSTR? Как преобразовать LPCVOID на LPCTSTR Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |