Название: Глюк QT 3.3.0 ? Отправлено: c++ от Май 03, 2004, 23:45 Сразу скажу, что я в 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. Название: Глюк QT 3.3.0 ? Отправлено: EugeneVC от Май 04, 2004, 00:38 раскажи а зачем тебе вообще qt в проекте
ты же его не используешь Название: Глюк QT 3.3.0 ? Отправлено: c++ от Май 07, 2004, 12:55 Ситуация следующая.
Конечно, есть большой проект, в котором много чего на qt написано. Вот в нем и не работает мэппинг больших файлов. Я стал выяснять, почему. Сначала сразу в начале функции main() закомментарил все, сделал в ней ТОЛЬКО мэппинг. Не помогло. Далее, удалил вообще все из проекта. Тоже не помогло! Естественно, остался вариант только с настройками проекта. Вот его в предыдущем сообщении я и описывал, т.е. никакая функциональность qt не используется, но линковка есть. Кстати, можешь сам попробовать. Даже интересно, что получится. Thanx. P.S. Напомню, речь идет о QT 3.3.0, откомпилированной VC 7.0 Название: Глюк QT 3.3.0 ? Отправлено: EugeneVC от Май 07, 2004, 13:04 а скинь ка сюда кусочки кода
а то я с мапингом не работал никогда Название: Глюк QT 3.3.0 ? Отправлено: c++ от Май 08, 2004, 13:47 Вот примерный код функции main():
Код:
Не забудь: Linker->Input->Additional Dependencies поставить qt-mt330.lib и qtmain.lib Linker->System->Subsystem поставить /SUBSYSTEM:WINDOWS Должно быть mapped == 0. А затем переставь /SUBSYSTEM:CONSOLE - должно заработать! Интересно, что у тебя получится. Thanx. |