LPSTR sTmp1;
String* sTmp2;
sTmp1 = *sTmp2; //Как пробразовать из указателя String* в LPSTR
Преобразование String* в LPSTR
Следущая задача:
Код:
Я уже перепробовал кучу способов, немогу понять как это сделать корректно, компелятор ругаетсья на несовместимость типов.
Самое смешное то что преобразование из LPSTR в String* проходит на ура.
Т.е.
Код:
LPSTR lpVar = "something";
String *str = lpVar;
String *str = lpVar;
Такой фокус работае и проблем нет, а как обратно?
З.Ы. нервно курю MSDN...
а вот так sTmp1 = sTmp2; //Как пробразовать из указателя String* в LPSTR
пробовал?
Я уже по всякому...
Код:
sTmp1 = sTmp2;
sTmp1 = sTmp2.c_str();
sTmp1 = *sTmp2.c_str();
sTmp1 = (LPSTR)sTmp2.c_str();
sTmp1 = (LPSTR)(*sTmp2)
....
sTmp1 = sTmp2.c_str();
sTmp1 = *sTmp2.c_str();
sTmp1 = (LPSTR)sTmp2.c_str();
sTmp1 = (LPSTR)(*sTmp2)
....
Вобщем комбинаций кучу перепробовал...
Я ваще непонимаю как так может быть? В одну сторону работает, а в другую нет....
LPSTR lpStr;
string str = "sdfkjsdfkjs";
lpStr = (LPSTR)str.c_str();
все работает
string *str = new string();
(*str) = "sdfkjsdfkjs";
lpStr = (LPSTR)(*str).c_str();
или
pStr = (LPSTR)str -> c_str();
твоя проблема в разиминовании указателя
Код:
String* sTmp=S"123";
LPSTR sStr = (LPSTR)(*sTmp).c_str();
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'
ты пытаешься юзать String из .Net, тебе этого надо (именно .Net)?
тогда посняи, может действительно я чето забыл подрубить?
У макрософта вроди последнии вресии тока:
Microsoft Visual Studio .NET 2005
З.Ы. Ну последняя версия 2005 но я ее еще недобыл
А я именно с Microsoft Visual Studio .NET 2003 щас работаю.
Давай так твой проект нуждается в clr?
Мне нужен С++ достаточно быстрый к которому можно безпроблем подрубать библиотеки типа mysql и другие библиотеки для работы с базами данных и сетивыми библиотекми разработанные другими разработчиками.
Борланд не подходит хотя я раньше именно на нем работал там ваще делаеш AnsiString и не праишся.
Я уже как 1,5 года ничего не писал, чето уже забылось..
Помимо борланда у меня был еще Microsoft Visual Studio .NET 2003
Вот на нем я и решил писать свой проект.
Достал библиотеку одну подрубил но в функции библиотеки дикларированы в качестве строковх переменных именно типом LPSTR
в тоже время в самом Си к примеру объект класса textBox->text выдает на строку указатель в формате String*.
Вот такая вот предыстроия.
З.Ы, но тут дело даже уже не в том как написать, а в понимании. Почему в одну сторону работает а в другую нет? я вот чего понять немогу :eek:
и мне интересно вот эти вещи
Цитата:
в тоже время в самом Си к примеру объект класса textBox->text выдает на строку указатель в формате String*.
и как ты cмог скомпилить проект с
Код:
System::String* str;
Вобщем я создал проект Windows Form Application (.NET)
Мне нужны было работать с окнами..
Щас гляну че там еще есть
смотри предыдущий мой пост, я тебе сказал что тебе нужно создавать :)
Взял создал в форме объект кнопка, содалась функция в файле form1.h
private: System::Void button1_Click_1(System::Object * sender, System::EventArgs * e)
{
String* sTmp="123";
Вот в ней и экспериментирую
1) Если будущая прогамма будет работать под WinXP, какой проект быстрей будет работать? Win32 Консольный или или обычный?
2) Есть ли мозможность распарелелить в однйо программе задачи? Т.е. сделать так, что один модуль обрабатывает сетевые запросы, второй постоянно обрабатывает базу данных, третий выполняет математические операции.
Цитата:
1) Если будущая прогамма будет работать под WinXP, какой проект быстрей будет работать? Win32 Консольный или или обычный?
зависит от интерфейса требуемого к твоему проекту
Цитата:
2) Есть ли мозможность распарелелить в однйо программе задачи? Т.е. сделать так, что один модуль обрабатывает сетевые запросы, второй постоянно обрабатывает базу данных, третий выполняет математические операции.
конечно, делай многопоточное приложение
А можно гденить почитаь про написание многопоточных приложений?
Джеффри Рихтер - Создание эффективных Win32-приложений с учетом спецификации 64-разрядной системы Windows. спроси у гугла он скажет где ты её можешь скачать
LPSTR - это банальный указатель на char, объявленный через typedef.
String - это класс. Данный класс реализует все рутинные операции по выделению/освобождению памяти в куче. Сам объект (оболочка на указатель) легко помещается в стек.
Чтобы получить указатель на char, нужно вызвать соответствующий метод класса String. Кстати, этот указатель может быть константного типа, поэтому LPSTR тоже должен быть const.
В данном случае автор попутал обычную виндовую либу и .Net класс. ))
Цитата: aks
el scorpio
В данном случае автор попутал обычную виндовую либу и .Net класс. ))
В данном случае автор попутал обычную виндовую либу и .Net класс. ))
всё равно полезно знать ;)
CString s="0000000";
LPSTR g=(LPSTR)(LPCSTR)s;
и все работает.
Цитата: AVDEY
Я делаю так:
CString s="0000000";
LPSTR g=(LPSTR)(LPCSTR)s;
и все работает.
CString s="0000000";
LPSTR g=(LPSTR)(LPCSTR)s;
и все работает.
Так делать опасно, т.к. здесь ты делаешь преобразование константного типа к неконстантному. Кроме того никто не гарантирует, что указатель g бкдет валидным после следующией операции с s.