Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
1

visual studio 2008 что и как

09.12.2008, 19:59. Показов 5621. Ответов 16
Метки нет (Все метки)

Пытаюсь перейти на VS2008 аж с VS6.0 1998 года. Кто пользовался, помогите разобраться

Куда делась кнопка Compile ?

жамкаю Build - в строке
Код
CMainWin::CMainWin(){
	Create(0, lpszTitleName,
		WS_OVERLAPPEDWINDOW, 
		rectDefault, NULL, MAKEINTRESOURCE(IDR_MAINFRAME));
высвечивает ошибку

Код
1>.\img.cpp(25) : error C2440: 'initializing' : cannot convert from 'const char [28]' to 'LPCTSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
ибо до этого
Код
char lpszTitleName[]="Раскрой гильотинным методом";
и в таком же духе еще 28 раз.. старенькая сишка ни разу даже не ругнулась на это, а тут на тебе.

смотрю в msdn
Код
#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif
.. и ничего не понимаю. юникод я нигде не определял вроде, стало быть смотрим сюда
Код
typedef __nullterminated CONST CHAR *LPCSTR;
что не так-то.. и как фиксить?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2008, 19:59
Ответы с готовыми решениями:

Отличие сборок Visual Studio 2008 от Visual Studio 2010
Здравствуйте, товарищи! Пытаюсь собрать библиотеку libvbucket, используя Visual Studio 2008....

Visual Studio 2008 как в лесу
я не особо сильно в этом шарю, хотел бы спросить, может кто и знает? как в этом детище от...

Как подключить Boost к Visual Studio 2008
Здравствуйте, подскажите пожалуйста как подключить boost к Visual Studio 2008. Хочу использовать...

Как подключить ресурс (картинку) в Visual Studio 2008 c++?
Добрый день. Я совсем не могу понять как использовать ресурсы... я создал через Visual Studio файл...

16
1047 / 381 / 15
Регистрация: 11.11.2008
Сообщений: 3,155
09.12.2008, 20:05 2
Кнопка Compile находиться здесь Build-Compile или Ctrl+F7
1
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
09.12.2008, 20:25 3
Ибо вместо char сказал создатель используйте Вы wchar_t или LPTSTR...

Добавлено через 32 секунды
Ты юникод, может, и не определял, а он сейчас везде - стандарт.
1
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
09.12.2008, 22:05 4
Оборачивай все строковые литералы в макрос _T(), который раскроется в то, что надо Ну и, конечно же, применяй TCHAR, _tstrcpy() и прочее.... Междк прочим, это еще VC++ 6 ( 98 )8) умеет... Примерно так:
Код
TCHAR lpszTitleName[]=_T("Раскрой гильотинным методом");
PS: чертов смайлик не по делу, как его убрать???
1
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
10.12.2008, 04:01  [ТС] 5
вроде и вот так работает
Код
wchar_t *lpszTitleName=L"Раскрой гильотинным методом";
только как тогда быть с такого рода вещами:
Код
	CEdit* pEdit1=(CEdit*)GetDlgItem(IDC_LENGTH);
	i=pEdit1->GetWindowTextLength();
	pEdit1->GetWindowText(buff,i+1);
	sscanf(buff,"%d",&f_Length);
ежли есть у кого заготовочка поизящнее, поделитесь, будьте любезны

Добавлено через 52 секунды
смайлики отключаются галочкой "отключить смайлы в тексте" 8)

Добавлено через 55 минут 46 секунд
и функция GetPathName возвращает нам СString, а чтобы сохранить файл нам опять нужен проклятущий LPCSTR... Почему в С++ 6.0 все работало-то?((

Добавлено через 2 часа 46 минут 55 секунд
благодаря примеру из MSDN, родился очередной уродец:
Код
	CEdit* pEdit1=(CEdit*)GetDlgItem(IDC_LENGTH);
	int i=pEdit1->GetWindowTextLength();
	LPTSTR pszMem = (LPTSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (i + 1), MEM_COMMIT, PAGE_READWRITE); 
    pEdit1->GetWindowText(pszMem, i + 1); 
//для проверки
	MessageBox(pszMem);
//выводит, шельмец!
теперь у меня есть переменная типа LPTSTR (чтоб ему провалиться), в которой есть нужное мне число... как теперь преобразовать это дело в нормальный старый добрый int? sscanf() (и вариации на тему) не работает хоть тресни! Кто знает английский - почитайте, я черт подери не один споткнулся с этой проблемой при пересадке проекта из студии 6.0 в более новую
сцылко.

Добавлено через 16 минут 3 секунды
у меня хоть компилятор не ругается на sscanf().. но от этого не легче, так как ей подавай char* а у меня треклятый LPTSTR
опять открываем msdn, и находим чудовище WideCharToMultiByte и пытаемся заюзать

Код
	char buff[256];
	WideCharToMultiByte(CP_ACP, 0, pszMem, -1, buff, 256, NULL, NULL);
	sscanf(buff,"%d",&f_Length);
и о боги... скомпилилось и вроде как сработало. Будь я трижды неладен, но в 6.0 как все просто было эээх!!!

Добавлено через 30 минут 56 секунд
Ничего что топик напоминает блог горе-программиста?) Может кому помогут мои потуги.
Ибо, хвала MSDN, вспомнил, что неплохо бы освобождать выделяемую память. В итоге
Код
void CDlgStart::OnBegin(){
	char buff[256];
	CEdit* pEdit1=(CEdit*)GetDlgItem(IDC_LENGTH);
	int i=pEdit1->GetWindowTextLength();
	//выделяем память...
	LPVOID lpvBase = VirtualAlloc((LPVOID) NULL, 
        (DWORD) (i + 1), MEM_COMMIT, 
        PAGE_READWRITE);
	//под вот это дело..
	LPTSTR pszMem = (LPTSTR)lpvBase; 
	//куда записываем данные из диалога
    pEdit1->GetWindowText(pszMem,i + 1); 
	//преобразуем в ANSI 
	WideCharToMultiByte(CP_ACP, 0, pszMem, -1, buff, 256, NULL, NULL);
	//и в конечном итоге вроде как получаем число..
	sscanf_s(buff,"%d",&f_Length);
	MessageBox(pszMem);
	//освобождаем память, на всякий случай
	VirtualFree(lpvBase, 0, MEM_RELEASE);
/* аналогичные нагромождения для других данных ...
....
*/
	EndDialog(ID_START_OK);
В итоге вроде как имеем число, которое надо запихать в вектор. Чем и займемся...
0
0 / 0 / 0
Регистрация: 10.12.2008
Сообщений: 6
10.12.2008, 05:36 6
Всё пойду в свою тему) Извиняюсь
0
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
10.12.2008, 07:19  [ТС] 7
ну вот, прервал мои размышления)
читай ответ в своей теме

Добавлено через 1 час 18 минут 18 секунд
Вот ведь так и думал. Стоило добраться до самого главного - и опять нескладуха.

в msdn в классе vector описана функция vector::to_array, которая ну очень облегчила бы мне жизнь. Но не тут то было. Нет такой функции у моих векторов. Хотя #include <cliext/vector> сделал, push_back, size работают. Но функции to_array просто нет.
в примере msdn
Код
    cliext::vector<wchar_t> c1;
У меня
Код
vector <int> v_Length;
, компилирую с /clr..

на cliext:: компилятор сразу ругается, namespace стоит std ибо нужен он... что за вектор у меня такой неполноценный?

Добавлено через 6 минут 8 секунд
и как всегда ответ нашелся сам собой
Код
for (int i = 0; i < v_Length.size(); ++i) 
        //а тут делаем все что надо с v_Length.at(i);
Добавлено через 1 минуту 28 секунд
а с
Код
warning C4018: '<' : signed/unsigned mismatch
как-нибудь разберемся. уфф... спать...
0
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.12.2008, 13:09 8
Цитата Сообщение от FOLKEN Посмотреть сообщение
в msdn в классе vector описана функция vector::to_array, которая ну очень облегчила бы мне жизнь. .....
И правильно, что не тут-то было! Это в каком таком MSDN? Небось C++/CLI ? Дык, этот уродец имеет к "настоящему" стандартному C++ весьма отдаленное отношение. Стандарт же никакой функции to_array не предусматривает.

Чисто имхо: писать в .NET есть смысл на "родном" для него языке C#, все остальное же - извращение + маркетинговые уловки M$. Поверь, переход C++ -> C# проходит всего за несколько дней (как грипп ) и сопровождается разве что некоторой головной болью .

Вообще, опиши среду разработки и целевую платформу; а то прямо как в "Алисе в Зазеркалье" - оно "все чуднее и чуднее"...
0
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
10.12.2008, 13:52  [ТС] 9
Все чудесатее и чудесатее
прогу пишу в Visual C++ 2008 (она же вроде 9.0), целевая платформа ну вроде как Windows XP, а сама фраза "переход C++ -> C#" вызывает приступ паники и желание куда-нибудь спрятаться)

З.Ы. что такое есть .NET знать не знаю..

Добавлено через 23 минуты 27 секунд
и все же как преобразовать CString, возвращаемый функцией GetPathName в LPSTR ?
0
1047 / 381 / 15
Регистрация: 11.11.2008
Сообщений: 3,155
10.12.2008, 20:39 10
ASP.NET это тип проэкта, .NET Framework это програмная тенология. Посмотри здесь http://ru.wikipedia.org/wiki/.NET_Framework
0
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.12.2008, 23:38 11
Цитата Сообщение от FOLKEN Посмотреть сообщение
и все же как преобразовать CString, возвращаемый функцией GetPathName в LPSTR ?
Ни Боже ж мой! GetPathName() (а кстати, метод какого класса?) вернет тебе CString - ну и применяй его там, где нужен либо CString, либо LPCTSTR - ибо CString имеет встроенный оператор преобразования в LPCTSTR. Если вдруг вместо LPCTSTR занадобился LPSTR (т.е. неконстантный) - сие свидетельствует о вероятном наличии бага в коде, который (баг) надо исправить, а не замазывать.
А еще поимей в виду, что по умолчанию VS2005 и VS2008 создают проекты с поддержкой уникода, - т.е. вместо char у тебя должны быть wchar_t и так далее. То же самое касается насчет sprintf/swprintf и других пар функций. Кстати, уникод можно отключить (в свойствах проекта Use Unicode character set - No или Not set) и все будет работать как и прежде с char и ANSI-версиями функций.
1
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
11.12.2008, 20:40  [ТС] 12
GetPathName это метод класса CFileDialog. Это все мне надо чтобы сохранить файл (bmp с результатом работы программы). GetPathName возвращает полный путь к файлу, который надо потом открыть fopen'ом и сделать с ним нужные действия.

Код
error C2440: 'type cast' : cannot convert from 'CString' to 'LPCSTR'
почему? это не одно и то же?

или переписывать вообще все, заменяя LPCSTR на LPCTSTR (который на самом деле LPCWSTR ибо юникод треклятый) и fopen на _wfopen и т.д. ...
или действительно отключить юникод к чертям... только уже половину переписал же ..
0
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
11.12.2008, 21:49 13
Цитата Сообщение от FOLKEN Посмотреть сообщение
Код
error C2440: 'type cast' : cannot convert from 'CString' to 'LPCSTR'
почему? это не одно и то же?
Конечно же, нет! Вот что пишет MSDN в статье Windows data types:

LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.

LPCTSTR An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.
This type is declared in WinNT.h as follows:
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif

И старайся не служить двум господам; если уж пишешь на MFC - попробуй забыть про fopen и иже с ним голый C API, а старайся использовать класс(ы) CFile/CStdioFile... и его методы. Они прекрасно уживаются с CString и другими MFC-классами. Короче, если уж начал играть в MFC - играй во всем по ее правилам.
0
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
11.12.2008, 22:40  [ТС] 14
приглядитесь, у меня LPCSTR а не LPCTSTR
Код
error C2440: 'type cast' : cannot convert from 'CString' to 'LPCSTR'
который в свою очередь
Код
typedef __nullterminated CONST CHAR *LPCSTR;
.. и тут вдруг понимаю что чар и стринг не совсем одно и то же.. лезу в мсдн и...
Код
CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want
юникод это конечно жуть как замечательно. вот только постоянно кажется что все как-то через задницу...


И старайся не служить двум господам; если уж пишешь на MFC - попробуй забыть про fopen и иже с ним голый C API, а старайся использовать класс(ы) CFile/CStdioFile... и его методы. Они прекрасно уживаются с CString и другими MFC-классами. Короче, если уж начал играть в MFC - играй во всем по ее правилам
полностью согласен, вот только время поджимает, приходится лепить из того что есть
0
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
13.12.2008, 05:02  [ТС] 15
вот то что мне нужно было, как оказалось
Код
CString str; // the given string
CStringA strA(str); // a helper string
LPCSTR ptr = strA;
пляски с бубном какие-то..
0
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
13.12.2008, 14:06 16
Дык, эта... Оно само-собой
У тебя проект собирается, видимо, с уникодом (определен макрос _UNICODE или как его там... эхх, склероз!). Поэтому CString (а это, на самом деле, CStringT - шаблонный класс) по умолчанию уникодный. Естественно, раз ты явно указал CStringA - то этот класс уже будет ANSI. Так что - никакой черной магии в этом нет.
0
4 / 4 / 0
Регистрация: 13.07.2010
Сообщений: 45
27.12.2011, 11:11 17
Простите, если невпопад.. Иногда случается вот такая ситуация: по завершении отладки windows приложения среда Visual Studio 2008 Team System становится поверх всех окон. Она собой перекрывает не только сторонние запущенные программы (точнее окна др.приложений), но и свои же собственные типа окна "настройки", всплывающие подсказки и тп тп. Может кому-то это покажется бредом, но я понять не могу откуда такая "ошибка" вылазит, что за фича такая?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2011, 11:11

Как в Visual Studio 2008 подключить библиотеку pthread.h?
Подскажите как подключить библиотеку pthread.h в Visual Studio 2008?

Как установить MFC на Visual Studio 2008 Express Edition?
Как установить MFC на Visual Studio 2008 Express Edition?

объясните как пользоваться Visual Studio 2008 а именно работу с С++?
Доброго времени суток. Не сочтите за труд помочь новичку. Извините за такой вопрос, и он весьма...

Как обработать в MFC visual studio 2008 обработку нажатых клавиш?
Как обработать в MFC visual studio 2008 обработку нажатых клавиш? Создал основанное на диалогах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru