Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Переход на Visual Studio 2005


Автор: Bibigon 30.4.2006, 18:25
Начал писать проект на MFC в VS 6 теперь вот хочу перейти на VS 2005.  Я вижу что классы форм, созданные в VS 6 при переходе на 2005 надо переделывать. Есть ли возможность, не переделывая полностью проект заново, перейти на 2005? 

Автор: DeadSoul 30.4.2006, 19:39
Цитата(Bibigon @  30.4.2006,  18:25 Найти цитируемый пост)
 Есть ли возможность, не переделывая полностью проект заново, перейти на 2005? 

А поопробывать открыть проект, созданный в 6-ке, в 2005? Оно само предложит проапгрейдить проект до 2005. Правда ошибок компиляции будет...
Код

for ( int i=0; i<size1 ; ++i )
{
//....
}

for ( i=0 ; i<size2 ; ++i )
{
//....
}
 

Автор: nikitao 30.4.2006, 19:47
Но это все же лучше,чем ничего smile  

Автор: Любитель 30.4.2006, 20:17
Цитата(DeadSoul @  30.4.2006,  19:39 Найти цитируемый пост)
for ( int i=0; i<size1 ; ++i )    
Код

{    
//....    
}    
for ( i=0 ; i<size2 ; ++i )    
{    
}


Просто здесь используется нестандартное расширение именно Visual C++. Пишем максимум близко к стандарту - изменений понадобится меньше.
 

Автор: DeadSoul 30.4.2006, 21:05
Любитель, а на 6-ой студии нельзя было писать по-другомуsmile.

Когда переходили с 7-ки(у которой есть настройка "использовать данное расширение") на 8-ку 80% времени ушло именно на эти for-ы 

Автор: Bibigon 30.4.2006, 22:32
Проблема в том, что готовый проект открывается нормально и компилируется, но если я пытаюсь изменить уже существующий класс диалогового окна, этот класс не виден. Может кто нибудь знает как работать с MFC в VS8 как будто это VS6?  Что изменить в настройках проекта? Или где? 

Автор: Любитель 3.5.2006, 13:16
Bibigon, что значит не видит? В Class View он есть?
DeadSoul, а что в 6-ке по нормальному не арботает (с двумя объявлениями)
я так честно сказать, уже и не помню... 

Автор: DeadSoul 3.5.2006, 22:26
Цитата(Любитель @  3.5.2006,  13:16 Найти цитируемый пост)
DeadSoul, а что в 6-ке по нормальному не арботает (с двумя объявлениями)

В силу глючности компилятораsmile 

Автор: LPNcom 4.5.2006, 17:25
У меня в VS2005 не работают вот такие весчи

1.    AfxMessageBox("Hi еврибади",MB_OK,NULL); Вместо строки в ковычках глотает только CString строку. smile 

2.    CString Tempo;
    Tempo.Format("%u",12345);
     Format нихатит работать, пришлось извращаться smile 

Пару часов прошло как VS2005 поставил, а уже чуть клаву не сломал. Бесит на таких вещах стопориться. smile 

Сейчас вот пытаюсь запустить функцию MCIWndCreate, ошибка : fatal error LNK1120: 1 unresolved externals
хз чо ей надо,) Заголовочный файл на месте.
 

Автор: DeadSoul 4.5.2006, 20:35
Цитата(LPNcom @  4.5.2006,  17:25 Найти цитируемый пост)
1.    AfxMessageBox("Hi еврибади",MB_OK,NULL); Вместо строки в ковычках глотает только CString строку.  

В настройках случайно юникод не стоит? 


Цитата(LPNcom @  4.5.2006,  17:25 Найти цитируемый пост)
2.    CString Tempo;
    Tempo.Format("%u",12345);     Format нихатит работать, пришлось извращаться  

А так:
Код

unsingned int qwerty=12345;
Tempo.Format("%u",qwerty);
 

Автор: LPNcom 4.5.2006, 21:43
Неа, Format один фиг не работает)

error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [3]' to 'const wchar_t *'
        with
        [
            BaseType=wchar_t,
            StringTraits=StrTraitMFC_DLL
        ]
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast



А где в настройках кодировку на юникод поменять не подскажешь? 

Автор: DeadSoul 4.5.2006, 21:54
А ну все понятно:
Код

Tempo.Format(L"%u",123456);


Добавлено @ 21:56 
Project -> Properties -> Configuration Properties -> General -> Character Set 

Автор: LPNcom 4.5.2006, 22:19
Уряя smile  Поменял кодировку - работает и Format и AfxMessageBox
Спасибо user posted image user posted image
 

Автор: Pchelovod 5.5.2006, 14:02
Извините за оффтоп, но есть вопрос с VC++ 2005. Перешёл на него с Delphi 7 и разбираюсь с огромным трудом. Сделал MFC Application. В мастере указал Use Unicode Libraries. Стал делать простенькую программу. Возникла ситуация, описанная выше. НО! Если отключить юникод, то перестаёт работать XP Manifest. Конечно не фатально, но всё же интересно в чём проблема? 

Автор: cozzzy 5.5.2006, 14:22
Что значит "не работает манифест" и почему я не знаю

Но убрать поодержку юникода - не лучшее решение. 
Достаточно перед строками ставить "L"

Код

AfxMessageBox(L"Превед");
  

Автор: LPNcom 5.5.2006, 14:43
А если нужно передать указатель на строку то как быть

Раньше я так делал

CString Path;
...
PlayFile(Path);  // void PlayFile(void*);
 

Автор: cozzzy 5.5.2006, 15:30
Использовать:
  • wchar_t* ( pure C++ )
  • LPWSTR  (виндовое)
  • std::wstring и функцию c_str() - STL
 

Автор: LPNcom 5.5.2006, 15:43
Про первое и последнее не понял, покажи пример

ПО поводу LPWSTR, если про это =)

CString Path;
...
PlayFile((LPWSTR)Path.GetBuffer());


то так тож не работает 

Непонятно как получить из CString обычную строчку (ANSI) 

Автор: cozzzy 5.5.2006, 16:14
Цитата(LPNcom @  5.5.2006,  14:43 Найти цитируемый пост)
Про первое и последнее не понял, покажи пример


1.
Код

wchar_t* pString = L"Первый пример";
//...
PlayFile(pString);


2. 
Код

std::wstring pString = L"Второй пример";
//....
PlayFile(pString.c_str());


Добавлено @ 16:16 
Похоже, ты хочешь именно CString использовать?
Поидее должно работать 

Код

PlayFile((LPCWSTR)strPath);


если нет, то объявляй явно CStringW 

Автор: LPNcom 7.5.2006, 22:12
Заменил содержимое манифеста этим
+ вместо XXXXXXXXXXXXXXXXXXXXXXXXXXXX вписать имя своего приложения
Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="X86" 
    name="Microsoft.Windows.XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    type="win32" 
/> 
<description>Your app description here</description> 
<dependency> 
    <dependentAssembly> 
        <assemblyIdentity 
            type="win32" 
            name="Microsoft.Windows.Common-Controls" 
            version="6.0.0.0" 
            processorArchitecture="X86" 
            publicKeyToken="6595b64144ccf1df" 
            language="*" 
        /> 
    </dependentAssembly> 
</dependency> 
</assembly>

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)