На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Старый проет
    Зравствуйте.
    Проект был написан лет 18 назад в XP SP3 32bit на VS6 VisualC++ MFC, потом в 2012 на - VisualStudio 2010 внесены какие-то изменения. Все работало.
    Сейчас возникла необходимость предать ему новую жизнь, изменив, добавив нужное.
    Win10 64it, VisualStudio 2019 Community VisualC++ MFC платформа win32

    Получил:

    Ошибка C1083
    Не удается открыть файл созданный компилятором: .\Debug" /EHsc /nologo /Fo.\Debug".asm: Invalid argument,
    Файл: C:\MyProjects\CNF\StdAfx.cpp

    Про с1083 много написано, читал. – без толку.
    Помогите
      Слишком мало данных. Попробуй создать проект заново и перетащить все исходники.
        Походу там просто лишняя кавычка затесалась
          Система упала, надо Win10 переустановить. Прям, «Не понос , так золотуха». Но я на правильном пути. Нашел предыдущую версию программы. Установил, запустил – ошибка несовместимости /Zi и /Gy-, что нормально для VS6. Исправил. Ошибок нет. EXE-шника тоже… посмотрел в настройках - …/Debug, запустил поиск на всякий случай - нигде нет. Думаю, отключу антивирус. Не успел.
            Восстановил win10. Есть ошибки.

            ON_MESSAGE(WM_ICONNOTIFY, OnIcon)

            static_cast: невозможно преобразовать "void (__thiscall CCNFDlg::* )(WPARAM,LPARAM)" в "LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)"

            Привет от VS6 Теперь не voitd, а LRESULT

            и как же преобразовать?

            Я переопределил функцию, видимо, криво, не помогло.
              Цитата TyT @

              ON_MESSAGE_VOID(WM_ICONNOTIFY, OnIcon)
                Можно поподробней. Я объявил
                ON_MESSAGE_VOID(WM_ICONNOTIFY, OnIcon) в BEGIN_MESSAGE_MAP
                Пишет: ошибка C2065 - необъявленный идентификатор

                Прочитать где-нибудь на стороне не получилось.
                  Он объявлен в <afxpriv.h>
                  Правда 2019 студии у меня давно нет. Я смотрю в 2022.
                  Если ваша функция не принимает и не возвращает параметров.

                  ExpandedWrap disabled
                    // like ON_MESSAGE but no return value
                    #define ON_MESSAGE_VOID(message, memberFxn) \
                        { message, 0, 0, 0, AfxSig_vv, \
                            (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&memberFxn },


                  Во вторых вы можете переопределить свою метод как
                  ExpandedWrap disabled
                    LRESULT OnIcon(WPARAM, LPARAM) {
                       ....
                       return 1;
                    }

                  B message map использовать
                  ExpandedWrap disabled
                    ON_MESSAGE(WM_ICONNOTIFY, &YourClass::OnIcon)


                  Добавлено
                  Метод я так понял используется для нотификации от иконки в системном трее?
                  Сообщение отредактировано: sharky72 -
                    sharky72, большое спасибо!

                    Это еще не конец:
                    « ссылка на неразрешенный внешний символ __imp__SetLayeredWindowAttributes@16 в функции "public: bool __thiscall ATL::CHeapPtrBase<char,class ATL::CCRTAllocator>::AllocateBytes(unsigned int)" (?AllocateBytes@?$CHeapPtrBase@DVCCRTAllocator@ATL@@@ATL@@QAE_NI@Z).»

                    Функция SetLayeredWindowAttributes из nafxcwd.lib у меня в программе не встречается. Как исправлять такую ошибку?
                      Она берется из WinAPI и как написано в документации требует как минимум _WIN32_WINNT 0x0500, а для VS6 по умолчанию 0x0401
                      У вас в настройках проекта какой SDK указан?
                      Макрос _WIN32_WINNT определен на какую версию?
                      Как вариант уберите все определения макроса _WIN32_WINNT, WINVER и т.д. и подключите <SDKDDKVer.h> в прекомпилируемом загловке чтобы использовать сборку под последнюю версию Windows/SDK/DDK
                      В настройках проекта поставьте SDK (latest version)

                      В последних версиях VS шаблон проекета создает targetver.h в котором эти макросы переопределены на последнюю версию
                      ExpandedWrap disabled
                        #pragma once
                         
                        // Including SDKDDKVer.h defines the highest available Windows platform.
                        // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
                        // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
                         
                        #include <SDKDDKVer.h>
                      Сообщение отредактировано: sharky72 -
                        Было:

                        _WIN32_WINNT 0x0A00
                        Версия пакета SDK для win10 последняя установленная
                        Стандарт С++ 14
                        Сообщение отредактировано: TyT -
                          Смотрите в сторону линкера. После конвертации проекта VS6 остается слишком много мусора. Что именно там у вас осталось прописано от старого проекта я не знаю. Как вариант сбросить значения по умолчанию.
                          Эта функция объявлена в User32.lib и почему ее линкер не находит - не скажу. Мне такое не встречалось.
                            Выяснил, что надо ориентироваться на VS2017, если интересно, вот:

                            https://learn.microsoft.com/ru-ru/cpp/build...p?view=msvc-170

                            установил VS2017, что надо, видимо криво, там не все так как написано. Сново:

                            LNK2001 неразрешенный внешний символ "__imp__SetLayeredWindowAttributes@16"

                            Хочу спросить: можно узнать, что вызывает эту функцию, может сделать по другому…


                            У меня VSComunity 2017 – 15.9.67 и
                            «средства поддержки C++ Windows XP для средств VS 2017 (версия 141) [не рекомендуется]» - нет.
                            Найти VS2017 непросто, подставляют 2022
                            Сообщение отредактировано: TyT -
                              Ну документацию по WinAPI никто не отменял. И вряд ли вы сделаете по другому. Это связано с отрисовкой окон.
                              https://learn.microsoft.com/en-us/windows/w...indowattributes

                              Ну поставьте 2022. Дело не столько в студии сколько в установленных библиотеках SDK/ATL/MFC
                              У меня поддержки XP вообще нет (или у вас проект конкретно под старые версии Windows?). Потому что под нее уже ничего не пишу.

                              P.S. если ваш проект не секретный - могу посмотреть.
                                Думаю проблема в настройках проекта.
                                Сообщение отредактировано: sharky72 -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0329 ]   [ 15 queries used ]   [ Generated: 14.06.25, 22:04 GMT ]