Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование String* в LPSTR

24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
У меня стоит Microsoft Visual Studio .NET 2003
Следущая задача:
 
Код:
LPSTR sTmp1;
String* sTmp2;

sTmp1 = *sTmp2; //Как пробразовать из указателя String* в LPSTR

Я уже перепробовал кучу способов, немогу понять как это сделать корректно, компелятор ругаетсья на несовместимость типов.

Самое смешное то что преобразование из LPSTR в String* проходит на ура.
Т.е.
 
Код:
LPSTR lpVar = "something";
String *str = lpVar;

Такой фокус работае и проблем нет, а как обратно?

З.Ы. нервно курю MSDN...
12K
06 сентября 2007 года
__AleXX__
133 / / 02.04.2007
Не так sTmp1 = *sTmp2; //Как пробразовать из указателя String* в LPSTR
а вот так sTmp1 = sTmp2; //Как пробразовать из указателя String* в LPSTR
пробовал?
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
Конешно пробовал..
Я уже по всякому...

 
Код:
sTmp1 = sTmp2;
sTmp1 = sTmp2.c_str();
sTmp1 = *sTmp2.c_str();
sTmp1 = (LPSTR)sTmp2.c_str();
sTmp1 = (LPSTR)(*sTmp2)
....

Вобщем комбинаций кучу перепробовал...
Я ваще непонимаю как так может быть? В одну сторону работает, а в другую нет....
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
А какой ты стринг юзаешь?

LPSTR lpStr;
string str = "sdfkjsdfkjs";
lpStr = (LPSTR)str.c_str();
все работает
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
LPSTR lpStr;
string *str = new string();
(*str) = "sdfkjsdfkjs";
lpStr = (LPSTR)(*str).c_str();
или
pStr = (LPSTR)str -> c_str();

твоя проблема в разиминовании указателя
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
Ну простйо пример:
 
Код:
String* sTmp=S"123";

LPSTR sStr = (LPSTR)(*sTmp).c_str();


На это пишит:
error C2039: 'c_str' : is not a member of 'System::String'
stdafx.cpp(0) : see declaration of 'System::String'
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
ты пытаешься юзать String из .Net, тебе этого надо (именно .Net)?
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
Ну у меня именно он стоит...
тогда посняи, может действительно я чето забыл подрубить?
У макрософта вроди последнии вресии тока:
Microsoft Visual Studio .NET 2005
З.Ы. Ну последняя версия 2005 но я ее еще недобыл

А я именно с Microsoft Visual Studio .NET 2003 щас работаю.
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
Давай так твой проект нуждается в clr?
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
Я незнаю что такео Clr.
Мне нужен С++ достаточно быстрый к которому можно безпроблем подрубать библиотеки типа mysql и другие библиотеки для работы с базами данных и сетивыми библиотекми разработанные другими разработчиками.
Борланд не подходит хотя я раньше именно на нем работал там ваще делаеш AnsiString и не праишся.
Я уже как 1,5 года ничего не писал, чето уже забылось..
Помимо борланда у меня был еще Microsoft Visual Studio .NET 2003
Вот на нем я и решил писать свой проект.

Достал библиотеку одну подрубил но в функции библиотеки дикларированы в качестве строковх переменных именно типом LPSTR
в тоже время в самом Си к примеру объект класса textBox->text выдает на строку указатель в формате String*.

Вот такая вот предыстроия.

З.Ы, но тут дело даже уже не в том как написать, а в понимании. Почему в одну сторону работает а в другую нет? я вот чего понять немогу :eek:
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
Ну скорее сторонние либы будут не на менедж с++, поетому тебе нет необходимости юзать дотнет. Я так понимаю проект будет с гуями поетому выбирай какими средствами будешь оперировать толь это MFC, ATL, WinAPI, Qt и т.д. Далее если ты выбрал MFC то создаешь MFC Application если ATL то ATL Project и для остальных Win32 Project. и там у тебя таких проблем не будет.

и мне интересно вот эти вещи
Цитата:

в тоже время в самом Си к примеру объект класса textBox->text выдает на строку указатель в формате String*.

и как ты cмог скомпилить проект с

 
Код:
System::String* str;
?
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
А я кажеться начинаю тебя понимать про что ты говриш...
Вобщем я создал проект Windows Form Application (.NET)
Мне нужны было работать с окнами..
Щас гляну че там еще есть
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
смотри предыдущий мой пост, я тебе сказал что тебе нужно создавать :)
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
А хЗ как я это смог...
Взял создал в форме объект кнопка, содалась функция в файле form1.h

private: System::Void button1_Click_1(System::Object * sender, System::EventArgs * e)
{
String* sTmp="123";

Вот в ней и экспериментирую
24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
Тогда возникло прау вопросов:
1) Если будущая прогамма будет работать под WinXP, какой проект быстрей будет работать? Win32 Консольный или или обычный?
2) Есть ли мозможность распарелелить в однйо программе задачи? Т.е. сделать так, что один модуль обрабатывает сетевые запросы, второй постоянно обрабатывает базу данных, третий выполняет математические операции.
5.9K
06 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
Цитата:

1) Если будущая прогамма будет работать под WinXP, какой проект быстрей будет работать? Win32 Консольный или или обычный?


зависит от интерфейса требуемого к твоему проекту

Цитата:

2) Есть ли мозможность распарелелить в однйо программе задачи? Т.е. сделать так, что один модуль обрабатывает сетевые запросы, второй постоянно обрабатывает базу данных, третий выполняет математические операции.


конечно, делай многопоточное приложение

24K
06 сентября 2007 года
Delta_Q
26 / / 06.09.2007
А можно гденить почитаь про написание многопоточных приложений?
5.9K
07 сентября 2007 года
Zushenskiy
161 / / 29.06.2006
Джеффри Рихтер - Создание эффективных Win32-приложений с учетом спецификации 64-разрядной системы Windows. спроси у гугла он скажет где ты её можешь скачать
309
07 сентября 2007 года
el scorpio
1.1K / / 19.09.2006
Расшифруем названия типов
LPSTR - это банальный указатель на char, объявленный через typedef.
String - это класс. Данный класс реализует все рутинные операции по выделению/освобождению памяти в куче. Сам объект (оболочка на указатель) легко помещается в стек.
Чтобы получить указатель на char, нужно вызвать соответствующий метод класса String. Кстати, этот указатель может быть константного типа, поэтому LPSTR тоже должен быть const.
240
07 сентября 2007 года
aks
2.5K / / 14.07.2006
el scorpio
В данном случае автор попутал обычную виндовую либу и .Net класс. ))
92
07 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: aks
el scorpio
В данном случае автор попутал обычную виндовую либу и .Net класс. ))


всё равно полезно знать ;)

538
16 сентября 2007 года
AVDEY
188 / / 17.11.2005
Я делаю так:
CString s="0000000";
LPSTR g=(LPSTR)(LPCSTR)s;
и все работает.
3
16 сентября 2007 года
Green
4.8K / / 20.01.2000
Цитата: AVDEY
Я делаю так:
CString s="0000000";
LPSTR g=(LPSTR)(LPCSTR)s;
и все работает.


Так делать опасно, т.к. здесь ты делаешь преобразование константного типа к неконстантному. Кроме того никто не гарантирует, что указатель g бкдет валидным после следующией операции с s.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог