Точка входа Qt5 программы и компилятор Visual Studio 2012+

Многие сталкивались с тем что при компиляции студией Qt-проектов (и не только) Windows не хочет использовать стандартную функцию main(), а требует свои

WinMain

для GUI приложений и при использовании UNICODE, выдавая ошибки линковки вроде этих:

LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup

или

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

На более старых версиях проблему можно было отчасти решить, задав точку входа принудительно через

/ENTRY:main

или

#pragma comment( linker, «/entry:main» )

Но сейчас такой способ больше не работает, программа будет падать при старте. Если вам не нужна поддержка WCHAR в параметрах argv, то проще всего слинковать со специальной служебной либой Qt5 для линковки с main(). Библиотека называется Qt5::WinMain:

IF (BUILD_WIN32)
TARGET_LINK_LIBRARIES(${PROJECT} Qt5::WinMain) # Correct entry point
ENDIF()

VKMM (Vkontakte Music Mania) теперь open-source

Мой старый проект (основное развитие в 2012 году) гибридного музыкального плеера VKMM выложен в открытый доступ.

Перед выкладкой выполнил портирование на Qt5. Были сложности с компиляцией Qt5 проекта под Windows, но кажется что (почти) всё работает. Точно есть проблемы с last.fm API и событиями в потоках движка плеера.

Проект на gitgub: github.com:petrows / vkmm-desktop

MTC-Service 1.19 — исправление рассинхрона регулятора громкости

В новой версии добавлена совместимость с некоторыми магнитолами KGL где присутствует нестандартное число шагов регулировки громкости. Исправление по просьбе пользователя форума 4pda.

Суть проблемы — в магнитоле используется формула для записи «настоящего» значения громкости (0-100), которое рассчитывается из «андроидной» (0-30) + добавляется нелинейность (логарифмическая шкала). Ранее максимальное значение громкости Android было жестко прописано в коде, теперь программа берет его из настроек. Так же китайцы поменяли формулу вычисления с операций целочисленными типами на вычисления с плавающей точкой.

String vol_max_s = ((AudioManager) ctx.getSystemService(«audio»)).getParameters(«cfg_maxvolume=»);
volumeMax = Float.parseFloat(vol_max_s);

Commit на GutHub

Сервис магнитолы Microntek