|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||||||||||||||||||||||||
Как отменить действие макроса UNICODE?19.09.2014, 19:08. Показов 5829. Ответов 15
Метки нет (Все метки)
Друзья! Недавно качнул один из компиляторов компилятор gcc, вот начинаю работать. Создал диалоговое окно (конструктором форм), но хоть код и минимальный, но файлов с исходниками несколько, все их не выкладываю поэтому. Есть там такая функция:
0
|
||||||||||||||||||||||||||
| 19.09.2014, 19:08 | |
|
Ответы с готовыми решениями:
15
Как отменить действие макроса Как отменить действие обработчика? Как отменить действие стиля? |
|
22 / 25 / 11
Регистрация: 10.10.2013
Сообщений: 165
|
|
| 19.09.2014, 20:13 | |
|
Все "макросовые" дефайны, насколько я знаю, делаются в самом самом верху над инклюдами.
Добавлено через 1 минуту А, еще попробуйте настройки проекта посмотреть.
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
| 19.09.2014, 21:22 | ||||||
|
Как уже сказал inst_mefi имеет смысл менять в свойствах проекта. Ну а тут
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
||||||||
| 19.09.2014, 22:09 [ТС] | ||||||||
|
++++++++++++++++++++++++++++++++++++++++ +++++++++++++++ prApp.h
//---------------------------------------------------------------------------
// // Name: prApp.h // Author: ser // Created: 19.09.2014 10:10:07 // Description: // //--------------------------------------------------------------------------- #ifndef __PRDLGApp_h__ #define __PRDLGApp_h__ #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include <wx/wx.h> #else #include <wx/wxprec.h> #endif class prDlgApp : public wxApp { public: bool OnInit(); int OnExit(); }; #endif prDlg.h
///-----------------------------------------------------------------
/// /// @file prDlg.h /// @author ser /// Created: 19.09.2014 10:10:07 /// @section DESCRIPTION /// prDlg class declaration /// ///------------------------------------------------------------------ #ifndef __PRDLG_H__ #define __PRDLG_H__ #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include <wx/wx.h> #include <wx/dialog.h> #else #include <wx/wxprec.h> #endif //Do not add custom headers between //Header Include Start and Header Include End. //wxDev-C++ designer will remove them. Add custom headers after the block. ////Header Include Start ////Header Include End ////Dialog Style Start #undef prDlg_STYLE #define prDlg_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxMINIMIZE_BOX | wxCLOSE_BOX ////Dialog Style End class prDlg : public wxDialog { private: DECLARE_EVENT_TABLE(); public: prDlg(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("pr"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = prDlg_STYLE); virtual ~prDlg(); void prDlgActivate(wxActivateEvent& event); void prDlgActivateApp(wxActivateEvent& event); void prDlgEnterWindow(wxMouseEvent& event); private: //Do not add custom control declarations between //GUI Control Declaration Start and GUI Control Declaration End. //wxDev-C++ will remove them. Add custom code after the block. ////GUI Control Declaration Start ////GUI Control Declaration End private: //Note: if you receive any error with these enum IDs, then you need to //change your old form code that are based on the #define control IDs. //#defines may replace a numeric value for the enum names. //Try copy and pasting the below block in your old form header files. enum { ////GUI Enum Control ID Start ////GUI Enum Control ID End ID_DUMMY_VALUE_ //don't remove this value unless you have other enum values }; private: void OnClose(wxCloseEvent& event); void CreateGUIControls(); }; #endif А в них в общей сложности существует 5 подключений как бы внешних хидеров, идущих в комплекте с компилятором.
prApp.h
//---------------------------------------------------------------------------
// // Name: prApp.h // Author: ser // Created: 19.09.2014 10:10:07 // Description: // //--------------------------------------------------------------------------- #ifndef __PRDLGApp_h__ #define __PRDLGApp_h__ #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #undef UNICODE #include <wx/wx.h> #else #undef UNICODE #include <wx/wxprec.h> #endif class prDlgApp : public wxApp { public: bool OnInit(); int OnExit(); }; #endif prDlg.h
///-----------------------------------------------------------------
/// /// @file prDlg.h /// @author ser /// Created: 19.09.2014 10:10:07 /// @section DESCRIPTION /// prDlg class declaration /// ///------------------------------------------------------------------ #ifndef __PRDLG_H__ #define __PRDLG_H__ #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #undef UNICODE #include <wx/wx.h> #undef UNICODE #include <wx/dialog.h> #else #undef UNICODE #include <wx/wxprec.h> #endif //Do not add custom headers between //Header Include Start and Header Include End. //wxDev-C++ designer will remove them. Add custom headers after the block. ////Header Include Start ////Header Include End ////Dialog Style Start #undef prDlg_STYLE #define prDlg_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxMINIMIZE_BOX | wxCLOSE_BOX ////Dialog Style End class prDlg : public wxDialog { private: DECLARE_EVENT_TABLE(); public: prDlg(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("pr"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = prDlg_STYLE); virtual ~prDlg(); void prDlgActivate(wxActivateEvent& event); void prDlgActivateApp(wxActivateEvent& event); void prDlgEnterWindow(wxMouseEvent& event); private: //Do not add custom control declarations between //GUI Control Declaration Start and GUI Control Declaration End. //wxDev-C++ will remove them. Add custom code after the block. ////GUI Control Declaration Start ////GUI Control Declaration End private: //Note: if you receive any error with these enum IDs, then you need to //change your old form code that are based on the #define control IDs. //#defines may replace a numeric value for the enum names. //Try copy and pasting the below block in your old form header files. enum { ////GUI Enum Control ID Start ////GUI Enum Control ID End ID_DUMMY_VALUE_ //don't remove this value unless you have other enum values }; private: void OnClose(wxCloseEvent& event); void CreateGUIControls(); }; #endif
0
|
||||||||
|
22 / 25 / 11
Регистрация: 10.10.2013
Сообщений: 165
|
|
| 19.09.2014, 22:17 | |
|
kravam, в начале каждого файла, где есть #include <something(файл созданный не вами)> напишите #undef UNICODE. Упрощая слова Tulosba.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|
| 19.09.2014, 22:27 [ТС] | |
|
Не помогло. Там два хидера и два *.cpp, я в начале каждого прописал #undef UNICODE, а оно всё равно вместо
FindFirstFile подставляет FindFirstFileW
0
|
|
|
22 / 25 / 11
Регистрация: 10.10.2013
Сообщений: 165
|
|
| 19.09.2014, 22:29 | |
|
kravam, мде... я, к сожалению в вашей среде не работал, деталей не знаю. Ну в крайнем случае вы можете руками прописать FindFirstFileA и будет вам счастье.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|
| 19.09.2014, 22:33 [ТС] | |
|
Нет. Дело в том, что там кроме этой функции ещё и другие функции есть, везде не перенаписываешься. Кроме того, эти функции принимают аргументы и они все должны соответствовать тык скыть всему и вся. В общем, надо отменить юникод для всего проекта разом.
0
|
|
|
Ушел с форума
|
|
| 19.09.2014, 22:41 | |
|
Стоит попробовать "-U UNICODE" в командной строке компилятора.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|
| 19.09.2014, 22:50 [ТС] | |
|
Не помогает. Я аж в три места этот параметр прописал.
0
|
|
|
Ушел с форума
|
||
| 19.09.2014, 22:56 | ||
|
UNICODE где-то да определен, либо в командной строке компилятора, либо в подключенных заголовках. В Visual C++ я бы дал команду построить файл с препроцессинговым выводом и нашел бы там злосчастную строку. Как это сделать в GCC/MinGw - не в курсе...
1
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 19.09.2014, 23:02 | ||
|
Стоит все-таки поискать файл где unicode выставляется. И что-то подсказывает мне, что это делается внутри библиотеки wx - она может быть так собрана, c этим макросом (что-то вроде wxUSE_UNICODE при сборке библиотеки). Если это действительно так, то категорически не рекомендую локально отключать unicode у себя, чревато нарушением ODR со всеми вытекающими.
1
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|||||||||||||||||||||
| 20.09.2014, 21:50 [ТС] | |||||||||||||||||||||
|
Друзья! Я ковырялся-ковырялся с кодом, упрощал его до минимума и вот что получилось:
Компилим, получаем ошибку, из-за который весь сыр-бор разгорелся (первоначально я использовал функцию FindFirstFile, но лучше MessageBox, она попроще будет) ошибка:
И возвращаясь к моему вопросу: где мне ВОТ ТУТ его убрать?
Но я так работал раньше, а щас хочу цивилизованнно. Повторюсь, не лезть своими толстыми пальцами в штатные инклуды, а изящно где-нибудь в своём аворском файле отменить макрос UNICODE. Неужели не получится?
0
|
|||||||||||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||||
| 20.09.2014, 22:12 | |||||||||||||
Выхода я вижу три: 1) Не использовать WinAPI вообще. Вместо этого использовать соответствующие возможности библиотеки wx. Это наиболее правильный способ на мой взгляд. 2) Перекомпилировать (или найти готовую) версию wx в ANSI режиме (без юникода). 3) Использовать функции WinAPI с указанием конкретных версий (W или A).
1
|
|||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
|
|||||||||||||
| 20.09.2014, 22:54 [ТС] | |||||||||||||
Другое дело, что мне вот тут подумалось, что, наверное, есть всё-таки смысл жёстко вбить юникод в программу создания диалоговое окно, что и было ими сделано. ++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++ Значит, можно явно указывать A или W, это да. Значит, тут так- этот способ хорош, если пишешь исходник с ноля. А если берёшь уже готовый код, написанный ранее, где предполагается, что все функции "A", тогда всё плохо. И дело не в том, что вручную всё заменять придётся дело в том, что очень легко пропустить, что именно нужно заменять . Пример. Пишем:
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++ Мне кажется, есть четвёртый хороший способ. Писать сторонний код без юникода и оформлять его в виде функций. А потом просто линковать с юникодовским кодом и всё. Зря что ли придумали раздельную компиляцию? ++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++
0
|
|||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 20.09.2014, 23:05 | |||
|
Так что я буду настаивать, что использовать WinAPI совместно с wx, как ты сказал, нецивилизованно. Это тоже самое, что использовать WinAPI совместно с Qt. Можно, но в очень ограниченных случаях.
0
|
|||
| 20.09.2014, 23:05 | |
|
Помогаю со студенческими работами здесь
16
Как отменить следующие действие
Как отменить действие утилиты sysprep? Как отменить последнее действие в DataGridView1 TabControl как отменить действие CTRL+PageUp Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|