
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Зравствуйте.
Проект был написан лет 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 много написано, читал. – без толку. Помогите |
Сообщ.
#2
,
|
|
|
Слишком мало данных. Попробуй создать проект заново и перетащить все исходники.
|
![]() |
Сообщ.
#3
,
|
|
Походу там просто лишняя кавычка затесалась
|
Сообщ.
#4
,
|
|
|
Система упала, надо Win10 переустановить. Прям, «Не понос , так золотуха». Но я на правильном пути. Нашел предыдущую версию программы. Установил, запустил – ошибка несовместимости /Zi и /Gy-, что нормально для VS6. Исправил. Ошибок нет. EXE-шника тоже… посмотрел в настройках - …/Debug, запустил поиск на всякий случай - нигде нет. Думаю, отключу антивирус. Не успел.
|
Сообщ.
#5
,
|
|
|
Восстановил win10. Есть ошибки.
ON_MESSAGE(WM_ICONNOTIFY, OnIcon) static_cast: невозможно преобразовать "void (__thiscall CCNFDlg::* )(WPARAM,LPARAM)" в "LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)" Привет от VS6 Теперь не voitd, а LRESULT и как же преобразовать? Я переопределил функцию, видимо, криво, не помогло. |
Сообщ.
#6
,
|
|
|
Цитата TyT @ ON_MESSAGE_VOID(WM_ICONNOTIFY, OnIcon) |
Сообщ.
#7
,
|
|
|
Можно поподробней. Я объявил
ON_MESSAGE_VOID(WM_ICONNOTIFY, OnIcon) в BEGIN_MESSAGE_MAP Пишет: ошибка C2065 - необъявленный идентификатор Прочитать где-нибудь на стороне не получилось. |
Сообщ.
#8
,
|
|
|
Он объявлен в <afxpriv.h>
Правда 2019 студии у меня давно нет. Я смотрю в 2022. Если ваша функция не принимает и не возвращает параметров. ![]() ![]() // 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 }, Во вторых вы можете переопределить свою метод как ![]() ![]() LRESULT OnIcon(WPARAM, LPARAM) { .... return 1; } B message map использовать ![]() ![]() ON_MESSAGE(WM_ICONNOTIFY, &YourClass::OnIcon) Добавлено Метод я так понял используется для нотификации от иконки в системном трее? |
Сообщ.
#9
,
|
|
|
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 у меня в программе не встречается. Как исправлять такую ошибку? |
Сообщ.
#10
,
|
|
|
Она берется из WinAPI и как написано в документации требует как минимум _WIN32_WINNT 0x0500, а для VS6 по умолчанию 0x0401
У вас в настройках проекта какой SDK указан? Макрос _WIN32_WINNT определен на какую версию? Как вариант уберите все определения макроса _WIN32_WINNT, WINVER и т.д. и подключите <SDKDDKVer.h> в прекомпилируемом загловке чтобы использовать сборку под последнюю версию Windows/SDK/DDK В настройках проекта поставьте SDK (latest version) В последних версиях VS шаблон проекета создает targetver.h в котором эти макросы переопределены на последнюю версию ![]() ![]() #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> |
Сообщ.
#11
,
|
|
|
Было:
_WIN32_WINNT 0x0A00 Версия пакета SDK для win10 последняя установленная Стандарт С++ 14 |
Сообщ.
#12
,
|
|
|
Смотрите в сторону линкера. После конвертации проекта VS6 остается слишком много мусора. Что именно там у вас осталось прописано от старого проекта я не знаю. Как вариант сбросить значения по умолчанию.
Эта функция объявлена в User32.lib и почему ее линкер не находит - не скажу. Мне такое не встречалось. |
Сообщ.
#13
,
|
|
|
Выяснил, что надо ориентироваться на 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 |
Сообщ.
#14
,
|
|
|
Ну документацию по WinAPI никто не отменял. И вряд ли вы сделаете по другому. Это связано с отрисовкой окон.
https://learn.microsoft.com/en-us/windows/w...indowattributes Ну поставьте 2022. Дело не столько в студии сколько в установленных библиотеках SDK/ATL/MFC У меня поддержки XP вообще нет (или у вас проект конкретно под старые версии Windows?). Потому что под нее уже ничего не пишу. P.S. если ваш проект не секретный - могу посмотреть. |
Сообщ.
#15
,
|
|
|
Думаю проблема в настройках проекта.
|