Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2013, 19:19   #1
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию Как преобразовать LPTSTR to System.String

Какую бы программу не пытался я писать,и в какой среде - постоянно палки в колеса вставляют проклятые несовместимые типы Unicode и ANSI.
На этот раз Visual Studio 2010 дает такую проблему:
GetCurrentDirectory(MAX_PATH,gamefo lder)
gamefolder у нас должна быть LPTSTR или TCHAR* (что вообщем одно и тоже)
Теперь мне нужно вывести в Edit1.Box->Text это значение.
Convert::ToString не прокатывает т.к. это указатель.
Как правильно преобразовать LongPointerTCHARSTRing в обычный String?
calypso вне форума Ответить с цитированием
Старый 08.04.2013, 20:01   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Что вы называете "обычный String"?
std::string?
CString?
Что-то еще?
waleri вне форума Ответить с цитированием
Старый 08.04.2013, 20:14   #3
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Походу System::String
Вот здесь обратное преобразование:
http://www.cyberforum.ru/visual-cpp/thread71096.html
calypso вне форума Ответить с цитированием
Старый 08.04.2013, 22:20   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

System.String - это CLR... вы уж определитесь которое API будете использовать WIN32 или .NET.

http://msdn.microsoft.com/en-us/libr...code-snippet-2
waleri вне форума Ответить с цитированием
Старый 08.04.2013, 23:28   #5
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Ну смотрите,для консоли сработал бы такой код:
Код:
TCHAR buffer[MAX_PATH];
	GetCurrentDirectory(sizeof(buffer),buffer);
	cout << buffer << endl;
Но поскольку на дворе 2013 год,и нам нужно писать современный GUI,то вместо cout значение buffer надо вывести в EditBox. А он кроме String ничего не принимает
calypso вне форума Ответить с цитированием
Старый 09.04.2013, 09:15   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну поскольку на дворе 2013 и нам нужно писать современный GUI, то вместо GetCurrentDirectory() надо использовать современные библиотеки, а они ничего, кроме String не возвращают. Так в чем проблема? Вы ссылку хоть посмотрели?
waleri вне форума Ответить с цитированием
Старый 09.04.2013, 09:55   #7
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Да тупанул немного.Оказывается надо было всего сделать:
Код:
using namespace System::IO;
<...тут всякая фигня..>
textBox1->Text=Directory::GetCurrentDirectory();
И всё. Но мне интересно почему преобразование LPTSTR->System.String не работает.
Я уже немного стал понимать что это:
LPTSTR=TCHAR*=wchar_t* для юникодного проекта (VS2010)
Мы пишем:
Код:
String ^papka;
GetCurrentDirectory(sizeof(gamefolder),gamefolder);
papka=gcnew String(gamefolder);
textBox1->Text=papka;
И выводится пустая строка. Всё таки хотелось докопаться до сути
calypso вне форума Ответить с цитированием
Старый 09.04.2013, 10:42   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А у вас точно Unicode проект?
Если до, то sizeof() не очень подходящий вариант...

А так...
http://social.msdn.microsoft.com/For...-059bea230b99/
waleri вне форума Ответить с цитированием
Старый 14.04.2013, 21:47   #9
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Если кому интересно,я докопался до причин глюка.
Нужно вместо LPTSTR указывать TCHAR gamefolder[]. На VS2008 работает такой код:
Код:
TCHAR gamefolder[MAX_PATH];
 String ^papka;
GetCurrentDirectory(sizeof(gamefolder),gamefolder);
papka=gcnew String(gamefolder);
textBox1->Text=papka;
Проект юникодный:
calypso вне форума Ответить с цитированием
Старый 14.04.2013, 22:42   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Чисто из любопытства, почему вы так упорно хотите использовать GetCurrentDirectory?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PsAPI. GetProcessImageFileName. Привести LPTSTR к string Человек_Борща Общие вопросы Delphi 9 30.05.2012 23:10
Как преобразовать String в Integer? vitaliymaz Паскаль, Turbo Pascal, PascalABC.NET 6 13.10.2011 19:35
Как преобразовать TShortCut в string? mobilitialex Общие вопросы Delphi 9 07.04.2011 23:30
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
Как преобразовать TextFile в String? DragonionS Паскаль, Turbo Pascal, PascalABC.NET 1 06.06.2007 18:38