Перестал компилироваться проект
От: sushko Россия  
Дата: 24.10.17 11:45
Оценка:
При компиляции проекта компилятор ВДРУГ стал выдавать ошибку на вызове:

pDialog->Create((LPCTSTR)CMyDialog::IDD, this);


ругается на то, что в первом параметре Create он хочет видеть UINT, а LPCTSTR его ну никак не устраивает. Я попробовал скомпилять версии программы месячной и двухмесячной давности (храню полные неинкрементальные копии папки с проектом в отдельных ZIP-файлах) — та же фигня. Regardless to say что месяц назад они компилировались без проблем.

Если в вызове выше убрать (LPCTSTR), то проект компилируется, но при первом же вызове CDialog::Create в другом месте программы падает где-то в недрах MFC.

Что я мог сломать в VS?

Ни в какие настройки VS я осознанно не лазал, но последние несколько часов много говорил по телефону с клиентами и по факту я не помню, на какие кнопки я мог нажимать.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re: Перестал компилироваться проект
От: Evgeniy Skvortsov Россия  
Дата: 24.10.17 13:54
Оценка:
Здравствуйте, sushko, Вы писали:

S>Что я мог сломать в VS?


У меня такое ощущение, что сломалось что-то в MFC, так как падает такой простейший код:
    CMFCApplication1Dlg *dlg = new CMFCApplication1Dlg();
    dlg->Create(IDD_MFCAPPLICATION1_DIALOG);

    m_pMainWnd = dlg;
    INT_PTR nResponse = dlg->DoModal();


При чем если заменить динамическое создание диалога на:
    CMFCApplication1Dlg dlg;

    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();


То всё прекрасно работает.

Почему падает, я так и не понял, прошелся отладчиком внутрь DoModal(), там вызывается PreModal()
и первой строкой этой функции стоит ASSERT(m_hWnd == NULL), на ней и падает. В чем причина — мне пока неясно.

Добавлено:

В общем как оказалось не нужно вызывать Create(), он теперь автоматов зовется из конструктора.
ТО есть меняем код на:

    CMFCApplication1Dlg *dlg = new CMFCApplication1Dlg();
    INT_PTR nResponse = dlg->DoModal();


И все прекрасно работает.
Судя по всему что-то наменяли в логике работы MFC и теперь для вызова DoModal() — не нужно звать Create()
Какого-то объяснения пока не обнаружил.
Отредактировано 24.10.2017 14:09 Evgeniy Skvortsov . Предыдущая версия . Еще …
Отредактировано 24.10.2017 14:04 Evgeniy Skvortsov . Предыдущая версия .
Re: Перестал компилироваться проект
От: Nikolaz Германия www.nikeware.com
Дата: 24.10.17 14:48
Оценка:
Здравствуйте, sushko, Вы писали:

S>
S>pDialog->Create((LPCTSTR)CMyDialog::IDD, this);
S>

S>ругается на то, что в первом параметре Create он хочет видеть UINT, а LPCTSTR его ну никак не устраивает.

Не скажу за всю Одессу, но при переходе с VS 2013 на VS 2015 у меня тоже было пару "срабатываний" на ID'ах. Там по факту правильней было использовать не (LPCTSTR)IDD, а MAKEINTRESOURCE(IDD).

Но меня смущает в вашем коде то, что Вы делаете именно (LPCTSTR)CMyDialog::IDD. Там два Create:

virtual BOOL Create(
   LPCTSTR lpszTemplateName,
   CWnd* pParentWnd = NULL 
);
virtual BOOL Create(
   UINT nIDTemplate,
   CWnd* pParentWnd = NULL 
);


Испокон веков вроде было всегда: pDialog->Create(CMyDialog::IDD, this);

Зачeм здесь (LPCTSTR) ?
Re[2]: Перестал компилироваться проект
От: sushko Россия  
Дата: 24.10.17 20:18
Оценка:
Здравствуйте, Nikolaz, Вы писали:

N>Испокон веков вроде было всегда: pDialog->Create(CMyDialog::IDD, this);

N>Зачeм здесь (LPCTSTR) ?

Это неважно. Вопрос состоит в том, что именно я мог сломать в VStudio так, что раньше такой код работал, а сейчас даже не компиляется?

Причем, как я уже писал, сломал я не проект, а именно среду, т.к. разные проекты, компилировавшиеся до того и хранящиеся в ZIPах, компилироваться теперь отказываются.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[2]: Перестал компилироваться проект
От: sushko Россия  
Дата: 24.10.17 20:20
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Судя по всему что-то наменяли в логике работы MFC и теперь для вызова DoModal() — не нужно звать Create()

ES>Какого-то объяснения пока не обнаружил.

Что значит "поменяли"? Оно что, теперь обновляется через интернет независимо от желания разработчика? Типа — бах, обновление, и все проекты перестали компилироваться?
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[3]: Перестал компилироваться проект
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.10.17 20:35
Оценка: 1 (1)
Здравствуйте, sushko, Вы писали:

S>Это неважно. Вопрос состоит в том, что именно я мог сломать в VStudio так, что раньше такой код работал, а сейчас даже не компиляется?

S>Причем, как я уже писал, сломал я не проект, а именно среду, т.к. разные проекты, компилировавшиеся до того и хранящиеся в ZIPах, компилироваться теперь отказываются.

Студия поставила апдейт какой?
Выбрал другую версию Platform SDK?

Сложно сказать что еще могло повлиять на все проекты сразу.
Re[4]: Перестал компилироваться проект
От: sushko Россия  
Дата: 24.10.17 20:42
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Студия поставила апдейт какой?


Не знаю, но IE вдруг повел себя по-другому. Наверное, обновился, собака.

bnk>Выбрал другую версию Platform SDK?


А где я мог это сделать?
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[5]: Перестал компилироваться проект
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.10.17 20:52
Оценка:
Здравствуйте, sushko, Вы писали:

bnk>>Студия поставила апдейт какой?


S>Не знаю, но IE вдруг повел себя по-другому. Наверное, обновился, собака.


Посмотри, что недавно ставилось в обновлениях. Можно попробовать откатиться на состояние "до".

bnk>>Выбрал другую версию Platform SDK?


S>А где я мог это сделать?


Запустить Windows SDK Configuration Tool и выбрать другую версию SDK?
Re[3]: Перестал компилироваться проект
От: Evgeniy Skvortsov Россия  
Дата: 25.10.17 07:01
Оценка:
Здравствуйте, sushko, Вы писали:

S>Что значит "поменяли"? Оно что, теперь обновляется через интернет независимо от желания разработчика? Типа — бах, обновление, и все проекты перестали компилироваться?


Вот тут ХЗ. Скорее всего версия SDK поменялась где-то и теперь не хочет компилироваться.
В проектах MFC в файле stfafx.h есть такой инклуд — targetver.h, в котором автоматически определяется версия SDK и компилятора
Можно попробовать вручную ставить нужные значения.

// Включение SDKDDKVer.h обеспечивает определение самой последней доступной платформы Windows.

// Если требуется выполнить сборку приложения для предыдущей версии Windows, включите WinSDKVer.h и
// задайте для макроопределения _WIN32_WINNT значение поддерживаемой платформы перед вхождением SDKDDKVer.h.
Отредактировано 25.10.2017 7:22 Evgeniy Skvortsov . Предыдущая версия . Еще …
Отредактировано 25.10.2017 7:03 Evgeniy Skvortsov . Предыдущая версия .
Re[4]: Перестал компилироваться проект
От: Nikolaz Германия www.nikeware.com
Дата: 25.10.17 07:17
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Вот тут ХЗ. Скорее всего версия SDK поменялась где-то и теперь не хочет компилироваться.

Уже теплее. Я же говорю, что у меня тоже с какого времени стало ругаться на функции из Win API,
которые работают с ресурсами. помогло использоавание MAKEINTRESOURCE() вместо (LPCTSTR).
А MAKEINTRESOURCE(), как известно, лежит в Platform SDK.

Я это заметил при переходе на Visual Studio 2015. Наверняка SDK тоже обновился.
Re: Перестал компилироваться проект
От: sushko Россия  
Дата: 25.10.17 08:18
Оценка:
Здравствуйте, sushko, Вы писали:

Докладываю: выполнил переустановку VStudio — не помогло. Снес VStudio, заново ее установил — помогло, теперь проекты компилируются. Специально проверил: вчера — после возникновения проблемы — в файле afxwin.h у класса CDialog был только метод

virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);


теперь, после удаления и установки VStudio, появился еще и метод

virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);


P.S. 8 рабочих часов потрачены на бессмысленные пляски с бубном
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[2]: Перестал компилироваться проект
От: Nikolaz Германия www.nikeware.com
Дата: 25.10.17 10:24
Оценка:
Здравствуйте, sushko, Вы писали:

S>Докладываю: выполнил переустановку VStudio — не помогло. Снес VStudio, заново ее установил — помогло, теперь проекты компилируются.

Так какая версия VStudio всё-таки? Не сообщите нам?
На само сообщение об ошибке от компилятора ещё бы глянуть

Переустановка — это наверное что-то вроде Upgrade/Refresh? Тогда, последние обновления, которые были у VStudio никак наверное не были затронуты.
Заново — это снести и поставить некую версию без её актуальных обновлений. Из этого вывод — ждите проблем опять . Студия в тихую что-нибудь обновить и будет то же самое.

S>теперь, после удаления и установки VStudio, появился еще и метод

S>
S>virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
S>


Он там всю жизнь был, потому как:
S>
S>virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
S>


Это просто обёртка над virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);:
// CDialog
_AFXWIN_INLINE BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd)
    { return CDialog::Create(ATL_MAKEINTRESOURCE(nIDTemplate), pParentWnd); }
Re[3]: Перестал компилироваться проект
От: sushko Россия  
Дата: 25.10.17 10:29
Оценка:
Здравствуйте, Nikolaz, Вы писали:

S>>Докладываю: выполнил переустановку VStudio — не помогло. Снес VStudio, заново ее установил — помогло, теперь проекты компилируются.

N>Так какая версия VStudio всё-таки? Не сообщите нам?

2010

N>На само сообщение об ошибке от компилятора ещё бы глянуть


Cannot convert LPCTSTR to UINT или что-то в этом духе. Дословно уже не приведу, т.к. все исправилось.

N>Переустановка — это наверное что-то вроде Upgrade/Refresh? Тогда, последние обновления, которые были у VStudio никак наверное не были затронуты.

N>Заново — это снести и поставить некую версию без её актуальных обновлений. Из этого вывод — ждите проблем опять . Студия в тихую что-нибудь обновить и будет то же самое.

Будут бить — будем плакать.

S>>теперь, после удаления и установки VStudio, появился еще и метод

S>>
S>>virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
S>>


N>Он там всю жизнь был, потому как:


Рррр. Я говорю, что когда я вчера вечером смотрел именно эти строки именно в этом файле, то этого метода в этой строке там не было. Настолько не было, что я по приколу попробовал даже сам его туда добавить. После добавления оно скомпилялось, но при исполнении программы падало при создании первого же диалогового окна.

Попробовать создать новый dialog based application и посмотреть, что из этого выйдет, не догадался
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[4]: Перестал компилироваться проект
От: Nikolaz Германия www.nikeware.com
Дата: 25.10.17 14:21
Оценка: +1
Здравствуйте, sushko, Вы писали:

N>>Так какая версия VStudio всё-таки? Не сообщите нам?

S>2010
Старовата однако ...

S>Рррр. Я говорю, что когда я вчера вечером смотрел именно эти строки именно в этом файле,

Может там какой MFC Extention Pack "влез" ?
2010 версия — вроде как раз тогда вышло MFC Ext на базе кода от BCGControlBar

Я пас ...

Но Вы держитесь держите нас в курсе!
Re[5]: Перестал компилироваться проект
От: sushko Россия  
Дата: 26.10.17 10:34
Оценка:
Здравствуйте, Nikolaz, Вы писали:

N>>>Так какая версия VStudio всё-таки? Не сообщите нам?

S>>2010
N>Старовата однако ...

Не настолько, чтобы платить за упгрейд
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re[5]: Перестал компилироваться проект
От: AlexGin Беларусь  
Дата: 26.10.17 10:49
Оценка: 1 (1)
Здравствуйте, Nikolaz, Вы писали:

N>Здравствуйте, sushko, Вы писали:


S>>Рррр. Я говорю, что когда я вчера вечером смотрел именно эти строки именно в этом файле,

N>Может там какой MFC Extention Pack "влез" ?
N>2010 версия — вроде как раз тогда вышло MFC Ext на базе кода от BCGControlBar

Там другие названия классов, в CDialog библиотека MFC Feature Pack ничего не добавляет.
Вместо CDialog, там CDialogEx:
http://mariusbancila.ro/blog/2008/03/13/mfc-feature-pack-cdialogex-implementation/

Появилось для MSVC-2008 в составе SP1:
http://ntcoder.com/bab/tutorial_mfc_feature_pack1_part1
Всё описанное — скорее всего результат апдейта, который M$ делает "тихой сапой".
В общем — любят мелкомягкие "радовать" юзера

P.S. От MSVC-2010, ИМХО, надо было давно уйти. Это самая глючная студия, с которой я когда-либо работал. Уже лучше сидеть на MSVC-2008.
Отредактировано 26.10.2017 11:01 AlexGin . Предыдущая версия .
Re[6]: Перестал компилироваться проект
От: Nikolaz Германия www.nikeware.com
Дата: 26.10.17 13:04
Оценка:
Здравствуйте, sushko, Вы писали:

S>Не настолько, чтобы платить за упгрейд


Community Edition вроде как достаточно "бесплатна":

For individuals:
Any individual developer can use Visual Studio Community to create their own free or paid apps.


For organizations:
An unlimited number of users within an organization can use Visual Studio Community for the following scenarios: in a classroom learning environment, for academic research, or for contributing to open source projects.
For all other usage scenarios:
In non-enterprise organizations, up to five users can use Visual Studio Community.
In enterprise organizations (meaning those with >250 PCs or >$1 Million US Dollars in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.