Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
Посл.ответ | Сообщение |
|
Создано: 13 июля 2012 18:28 · Личное сообщение · #1 Добрый день, уважаемые форумчане. Ни для кого не секрет, что решил я с недавних пор пойти учиться программированию. Поэтому стали меня интересовать практические аспекты кодинга, иногда весьма далёкие от вопросов реверсинга. Поэтому чтоб не засорять форум, решил создать этот блог. Стоит сказать, что вопросы, которые планируется тут разбирать, не такие уж и бесполезные. Они часто могут возникать при написании тех же кейгенов или тулз для реверсинга, так что, надеюсь, каждый сможет найти здесь что-нибудь интересное. Как некоторые уже догадались, вопросы Common Controls, простым числам, и сегодняшний вопрос по OpenGL как раз из серии учебных. Теперь о самом вопросе. На днях выполнял задание про отрисовку простых фигур: треугольника, квадрата и т.д. Решено было выполнять рисование средствами OpenGL. Литературы по этому делу много, поэтому я разобрался, что и как. Т.е. в литературе советовали использовать бибилиотеку glut.dll, которая сама не относится к стандартному OpenGL, но её применение, как я понял, упрощает использование OpenGL в своих проектах. Далее я решил создать базовый класс для отрисовки треугольника, а от него создать производные классы для отрисовки других геометрических фигур. Но на практике получилась вот такая сложность. Дело в том, что glut, по сути, инкапсулирует функции Windows и OpenGL, что упрощает операции с ними. Но от базовых вещей же никуда не деться. Т.е. если процедура обработки оконных сообщений (CALLBACK WindowProc) должна присутствовать, то в классе она должна быть статической. Так и здесь: Code:
Но вот проблема - мне нужно передать внутрь Draw несколько параметров. Являясь статическим методом, Draw не имеет указателя this, а значит не видит обычных полей. Статические поля он видит, но при попытке в конструкторе присвоить значения этим полям появляется ошибка линковки. Понятное дело, что по-хорошему, можно обойтись совсем без классов, но это превратит код в кашу - большое количество глобальных переменных, почти одинаковые функции со схожим функционалом принесут путаницу раньше, чем будут отрисованы несколько фигур. Кто посоветует, как быть в такой ситуации и как решить проблему со статическими функциями-членами? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 09 февраля 2013 18:47 · Личное сообщение · #2 На той же он базе, что и в твоём процессе, не обязательно такой велосипед делать. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 09 февраля 2013 19:22 · Личное сообщение · #3 |
|
Создано: 09 февраля 2013 20:47 · Личное сообщение · #4 |
|
Создано: 26 февраля 2013 15:22 · Поправил: ARCHANGEL · Личное сообщение · #5 Наконец начал открывать для себя мир Qt. Скачал видеоуроки с торрентов (очень неплохие, надо сказать), купил книгу Шлее по версии 4.8 и начал почитывать, плюс пытаюсь повторить увиденное в уроках, и даже получается. Посмотрев с десяток уроков, начал экспериментировать сам. Попробовал stl в среде разработки qt creator, вызов WinAPI - вроде, получается. И, надо сказать, что этот qt creator в чём-то выигрывает у студии. Для моего рабочего места - во всём. Во-первых, на порядок быстрее стартует, во-вторых, Intellisence работает гораздо лучше (стравнивал с 2010 версией, в 2012 тоже всё работает, так что с 2012 примерно одинаковы), в-третьих бесплатен. Но возникла така путаница - у меня давненько уже установлена студия 2010, потом я поставил (когда-то давно) сдк для qt, а вчера поставил qt creator. Получается, что для сборки проектов используется компилятор 2010 студии - это я вижу по коду в олли. Но вот незадача - как бы изменить опции компилятора и линковщика для qt creator версии 2.6.2, а то в уроках более старая версия описывается, и там в ней есть вкладка, где это можно увидеть/изменить (возможно, тоже можно) эти опции, а в этом не могу найти. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 26 февраля 2013 15:44 · Личное сообщение · #6 |
|
Создано: 26 февраля 2013 16:03 · Личное сообщение · #7 |
|
Создано: 26 февраля 2013 16:18 · Личное сообщение · #8 ARCHANGEL Вот кстати тебе ссылка на форум, там практически одно qt. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 26 февраля 2013 16:42 · Личное сообщение · #9 |
|
Создано: 26 февраля 2013 17:20 · Личное сообщение · #10 |
|
Создано: 26 февраля 2013 17:40 · Личное сообщение · #11 ARCHANGEL пишет: как в этом вот окне задать опцию для компилятора Многопоточная /MT, чтоб студийный компилер свой рантайм не лепил к ехе-шнику. В папке с qt есть папка mkspecs. В ней конфигурации для всех компиляторов. Нужно найти там win32-msvc2010(ну или другую студию, которая используется ) и открыть в блокноте qmake.conf Там будет такая запись Code:
Ну из названий понятно для чего эти значения(Release, debug) Нужно поменять MD на MT. Теперь по умолчанию проекты для VS2010 будут собираться с этими опциями. ----- http://ntinfo.biz |
|
Создано: 26 февраля 2013 20:09 · Личное сообщение · #12 F_a_u_s_t, hors Товарищи, какая-то мистика. Да, нашёлся нужный файл, поправил я там ключи, на MT поменял, и тут самое интересное. С исправленными параметрами вообще ничего не собирается, пишет ошибку линкера 2005: msvcrt.lib(ti_inst.obj):-1: ошибка: LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) уже определен в LIBCMT.lib(typinfo.obj) Исправил обратно, дебаг собирается, релиз - та же фигня. Причём, что странно, на рабочем компе такого не происходит, а на домашнем происходит. Возможно, я что-то не так собрал. Попробую разобраться. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 26 февраля 2013 21:33 · Личное сообщение · #13 |
|
Создано: 26 февраля 2013 22:50 · Личное сообщение · #14 Запустил, вначале помогло. Потом закрыл qt creator, удалил скомпиленный ехе, так как без рантайма он всё равно не собирался, несмотря на мои модификации файла qmake.conf. Потом опять открыл creator и запустил сборку - та же ошибка, запустил qmake - ничего не меняется, ошибка при попытке построения та же. И она не одна - их пять: msvcrt.lib(ti_inst.obj):-1: ошибка: LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) уже определен в LIBCMT.lib(typinfo.obj) msvcrt.lib(ti_inst.obj):-1: ошибка: LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) уже определен в LIBCMT.lib(typinfo.obj) LIBCMT.lib(crt0init.obj):-1: предупреждение: LNK4098: библиотека по умолчанию "msvcrt.lib" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library release\qtSimple.exe:-1: ошибка: LNK1169: обнаружен многократно определенный символ - один или более NMAKE:-1: ошибка: U1077: "C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\link.EXE" : возвращенный код "0x491" NMAKE:-1: ошибка: U1077: "C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe" : возвращенный код "0x2" Исправил файл qmake.conf обратно - но релиз всё равно не собирается - какой-то бред ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 26 февраля 2013 22:54 · Поправил: F_a_u_s_t · Личное сообщение · #15 |
|
Создано: 26 февраля 2013 23:05 · Личное сообщение · #16 |
|
Создано: 26 февраля 2013 23:10 · Личное сообщение · #17 |
|
Создано: 26 февраля 2013 23:20 · Личное сообщение · #18 hors Ну, это я догадался, меня смущает другое - почему я исправил настройки обратно, а ничего не меняется? F_a_u_s_t Да я с удовольствием ключи бы хоть какие-то попытался использовать, если б просёк, как тут это делать. Неужели тут нельзя, как в студии, зайти в настройки проекта и подправить параметры командной строки, передающиеся компилятору и линкеру, а надо шариться по каким-то богом забытым файлам, которые я бы без подсказки hors нашёл бы только через processmonitor (и то - не факт). Вообще я собирал qt по руководству из аттача. Но, как вы понимаете, это всё - для студии. В студии я тогда для теста скомпилил один примерчик и забил на qt. А это что-то как-то заинтересовался, ну очень красивый DiE у hors получился, вот и мне стало интересно. Я взял да и докачал qt creator, установил его, стал смотреть уроки и компилить примеры. Всё получалось, пока не решил я накодить что-то, что могло б в реальных условиях использоваться. Так, может, надо просто не так всё делать? В смысле, по-другому собирать? На форуме 2104_26.02.2013_EXELAB.rU.tgz - (QT 4.8.0 на Visual Studio 2010.pdf ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 26 февраля 2013 23:40 · Личное сообщение · #19 |
|
Создано: 27 февраля 2013 00:15 · Поправил: F_a_u_s_t · Личное сообщение · #20 ARCHANGEL По поводу ключей, то их во все времена в pro файлы писали, например QMAKE_CXXFLAGS_RELEASE = -MT вставляешь в pro и все, вот потоки да, должны быть собраны в обоих вариантах дабы можно было переключать. Добавлю для справки, мб пригодится: QMAKE_CFLAGS и QMAKE_CXXFLAGS влияют на любой тип сборки, хоть релиз, хоть отладочная, а вот QMAKE_CXXFLAGS_RELEASE в таком случае ключи будут влиять только на релиз сборку, думаю дальше разберешься. Тьфу, главное забыл: QMAKE_CXXFLAGS - опции компиляции. QMAKE_LFLAGS - опции линковки. |
|
Создано: 27 февраля 2013 00:29 · Поправил: ARCHANGEL · Личное сообщение · #21 Прочитал Как же мне собрать всё-таки в обоих вариантах дабы можно было переключать? Вот что в эту командную строку надо вписать? Нагуглил вот ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 27 февраля 2013 11:02 · Личное сообщение · #22 Попробовал пересобрать, в общем. С ключом MD собирается прекрасно, но если до начала сборки подправить файл настроек, как говорилось выше, то идёт попытка собрать с ключом MT, но потом что nmake, что jom выдают ошибки по типу ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 27 февраля 2013 17:01 · Личное сообщение · #23 |
|
Создано: 27 февраля 2013 17:33 · Личное сообщение · #24 |
|
Создано: 27 февраля 2013 17:45 · Поправил: hors · Личное сообщение · #25 |
|
Создано: 28 февраля 2013 00:21 · Личное сообщение · #26 В общем, что я сделал. Удалил старую версию библиотек через Uninstall, потом скачал qt-win-opensource-4.8.4-vs2010.exe, установил, исправил переменную окружения, т.е. теперь у меня qt был установлен внутрь папки C:\Qt\4.8.4. Далее я полез внутрь файла qmake.conf и изменил там строчки на такие: Code:
Дальше к консоли студии написал: configure -static -opensource -platform win32-msvc2010 Когда это действо завершилось, просто вписал одинокое nmake. Потом шарился по настройкам qt creator, чтоб он смог прохавать изменения в библиотеках Qt. Указал новый профиль, якобы, попытался компилить, но показывает: :-1: ошибка: LNK2001: неразрешенный внешний символ "_WinMainCRTStartup" ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 28 февраля 2013 00:28 · Личное сообщение · #27 |
|
Создано: 28 февраля 2013 00:53 · Личное сообщение · #28 F_a_u_s_t Code:
Выдаёт runtime error R6030 - CRT not initialized ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 28 февраля 2013 00:58 · Поправил: F_a_u_s_t · Личное сообщение · #29 ARCHANGEL Укажи явно путь к CRT, это все из за флага - NODEFAULTLIB Добавлю цитату из msdn: Code:
| Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 28 февраля 2013 01:38 · Личное сообщение · #30 |
|
Создано: 28 февраля 2013 13:31 · Личное сообщение · #31 ----- Stuck to the plan, always think that we would stand up, never ran. |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |