Сразу скажу, что я в QT мало чего понимаю, но вот с какой проблемой я столкнулся (я использую среду MS VS 2003 .NET).
Есть приложение на QT (в смысле происходит линковка через qt-mt330.lib и qtmain.lib, а никакой функциональности QT даже не задействовано, только линковка!), в котором используется win32 функция MapViewOfFile(). В коде используется функция main(), но в настройках проекта (Linker->System->Subsystem) установлено /SUBSYSTEM:WINDOWS. Вообще, такой код не должен нормально линковаться (естественно, не будет найденa _WinMain@16), но если в настройках проекта (Linker->Input->Additional Dependencies) стоят mt330.lib и qtmain.lib, то все линкуется (кстати, кто знает, как это происходит
?). Так вот, глюк заключается в том, что при достаточно большом размере файла, который мэппится (около 1.5 Гб), функция MapViewOfFile() возвращает 0! (с маленькими файлами все нормально). А если поставить как вообще положено флаг в настройках проекта /SUBSYSTEM:CONSOLE, то все нормально. Точно не знаю, но вроде бы при линковке с QT 3.0.0 такого не происходит.
В чем здесь проблема? С неправильной инициализацией CRT, которую, видимо, в случае флага /SUBSYSTEM:WINDOWS неправильно выполняет QT в функции CRTMainStartUp или как-то такое название, не помню...
Кстати, интересный момент. Если использовать функцию WinMain() и настройку /SUBSYSTEM:WINDOWS, все линкуется, и файл нормально мэппится, а вот если WinMain() и настройка /SUBSYSTEM:CONSOLE - даже не линкуется... Это видимо QT не поддерживает (и правильно делает, а то вообще хаос какой-то
)
Thanx.