Сейчас на форуме: (+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. |
|
Создано: 01 августа 2012 22:11 · Поправил: ARCHANGEL · Личное сообщение · #2 neomant Я, конечно, могу ошибаться, но мне кажется, что всякие такие навороченные классы достаточно непросто отлаживать. Никогда не пользовался CTime и CString, поэтому конкретно за них ничего сказать не могу, но вот какие-нибудь шаблоны stl типа вектора - это ж кошмар какой-то, сколько внутри оно содержит кода. Отладчик студии для меня жутко неудобный, мне кажется, что в нём ничегошеньки нельзя отладить, поэтому дебажу олькой по-прежнему. Но вот начинаю задумываться - что я буду делать, когда начнётся программирование всяких айфонов, айпадов (их эмуляторов), там уже олька не канает по понятным причинам, и как быть? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 01 августа 2012 23:59 · Поправил: neomant · Личное сообщение · #3 ARCHANGEL А навороченные классы и не надо отлаживать. Библиотеки пилятся годами и ошибки в них сведены к минимуму. Да, иногда могут встречаться, но гораздо чаще это ошибки неправильного использования. Порой кажется, что кода действительно много, но если приглядеться, он совсем не лишний. Я к тому, что используя чистый Win API будем повторять проверки, работу с ресурсами, многопоточность и много чего ещё не учтём, что уже реализовано до нас в библиотеках, классах. ARCHANGEL пишет: Отладчик студии для меня жутко неудобный Это дело привычки. Предпочитаю отлаживать исходный код когда он есть, а так - без Ольги никак. Под iOS своя среда разработки X-Code Objective-C со своим отладчиком. Практики мало, ничего сказать не могу. Вот только эмуляторов вроде как нет и сторонние приложения (без исходников) придётся изучать под Идой да ещё с ARM архитектурой разбираться. ----- Следуй за белым кроликом | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 02 августа 2012 00:43 · Личное сообщение · #4 ARCHANGEL Так, как не выспался, рискую еще фейл поймать, ну да ладно, не парит. stl, boost качественно написаны и велосипедя на winapi все равно придешь к аналогу std::string, std::vector, только скорее всего велосипед будет с квадратными колесами и с отладкой оных куда меньше проблем чем с отладкой своего кода,за mfc ничего сказать не могу, им не пользуюсь По поводу отладчика студии, то он далеко не плох, а на фоне борманского так вообще супер, лучше студийного не видел, если отлаживать исходники, а без отладчика только логирование спасет, что то типа google breakpad, ну или MessageBox c printf и в *.log. Ps. Class у тебя великоват мягко говоря, его можно в половину сократить, кстати у Страуструпа в книге можешь глянуть, он там как раз примеры приводит на классах для рисования. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 05 августа 2012 00:36 · Поправил: ARCHANGEL · Личное сообщение · #5 Вот он, результат мозговой деятельности. Так что, товарищи, всё было не зря - лабиринт и метод волновой трассировки при поиске пути получен. Управляется перемещение весёлым смайлом с помощью стрелок. Лабиринты генерируются по алгоритму Прима. ac35_04.08.2012_EXELAB.rU.tgz - WatchShow.rar ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 05 августа 2012 01:49 · Личное сообщение · #6 |
|
Создано: 05 августа 2012 13:08 · Поправил: ARCHANGEL · Личное сообщение · #7 F_a_u_s_t Согласен полностью - лабиринты и правда не очень заковыристые. Плюс к этому из-за того, что лабиринт представлен деревом, изначально может возникнуть заведомо проигрышная ситуация, когда для прохода к финишу нужно пройти мимо локации с монстром, а он, используя волновую трассировку, тупо идёт на тебя, и всё, сожрёт он тогда весёлого смайла, без вариантов. Что касается сложности - тут вообще всё в ступоре. Вот что значит "сложный лабиринт"? Для нас - для людей - это такой лабиринт, в котором путь от одной локации для другой найти затруднительно. И вот тут возникает много вопросов. Затруднительно, это как? То, что трудно для меня, для другого человека с более высокими умственными способностями - пара пустяков. Можно предположить, что трудно - это долго, Т.е. если две локации связывает маршрут, в который попадает ещё три локации, пройдя которые, мы можем оказаться в пункте назначения, то такой маршрут - простой, а если их на пути 500 - то сложный, но ведь сложным нельзя назвать маршрут, при котором нам нужно сделать 500 ходов по прямой не сворачивая. Значит тут важна "заковыристость". Но как её измерять - эту заковыристость? Во-вторых, какой бы у нас ни был задуплённый лабиринт, до соседних локаций дойти всегда просто (имеется ввиду, если между ними нет стенки). А до соседних соседних? А до их соседних? В общем, на каком этапе должна появляться сложность? Я полагаю, что лабиринты должны быть изучены гораздо лучше, чем мне удалось раскопать. И в реальном проекте на этом ни коим образом нельзя было останавливаться, ибо игра не играбельна. Но т.к. проект учебный, и т.з. выполнено, думаю, дальше можно заняться чем-то другим, возможно, более полезным. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 05 августа 2012 13:30 · Поправил: F_a_u_s_t · Личное сообщение · #8 |
|
Создано: 17 августа 2012 15:18 · Поправил: ARCHANGEL · Личное сообщение · #9 Продолжаем изучение всяких программерских шняг. На сей раз нужно мне написАть приложение, не будем вдаваться в подробности, зачем оно нужно и что оно делает, напишу только, что не выходит реализовать и с чем это связано. В общем, есть у меня простенькая база данных в виде .ini файла, там инфа разделена на секции, в каждой секции располагается произвольное количество строк формата ключ = значение, т.е. как описано в МСДН: [Section] key = Value Суть задачи в том, что у меня параметр key представляет из себя строку (ну, ясен пень, что ж ещё) из двух значений. Предположим, у меня есть два значения: "ххх" и "ууу". Тогда ключ выглядит как "ххх:ууу". Известно, что и первая, и вторая части должны полностью состоять из цифр. Так вот для проверки валидности этого параметра нужно использовать (ну, не то, чтоб нужно, но хочется) регулярные выражения библиотеки boost. Попробовал я чё-то там родить с применением boost::regex, а в ответ получил: >LINK : fatal error LNK1104: не удается открыть файл "libboost_regex-vc100-mt-s-1_50.lib" притом, что этот .lib на диске в папке буста у меня имеется, пути в свойствах проекта прописаны, иначе б не инклудились хидеры буста, а воз и ныне там. Я так понимаю, что смысла скидывать свой проект нету, т.к. у тех, у кого буст настроен - это будет компилиться, а у кого нет, то нет. Вопрос в том, как его настроить. Для выяснения я ж попёрся в раздел Getting started буста, где скачал маленький инсталлятор, которой потом с инета ещё примерно 400 Мбайт закачал, и это буст, потом добавил пути в свойствах проекта - и всё. Качал файлы для своей версии студии - 2010. И в чём же косяк? И, тогда, как её установить? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 17 августа 2012 15:46 · Личное сообщение · #10 |
|
Создано: 17 августа 2012 16:33 · Личное сообщение · #11 neomant Code:
Уже даже так делал - ошибка всё та же. Вот что ж такой буст капризный? ATL - не, ну понятно, что можно по-всякому, и в QT есть регэкспы, та можно и без них - своими силами, но интерес именно в бусте, раз уж пошло такое дело. Более того, там из него я ещё пару полезных штук присмотрел, так что хотелось бы добить. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 17 августа 2012 17:59 · Личное сообщение · #12 |
|
Создано: 17 августа 2012 19:41 · Поправил: _ruzmaz_ · Личное сообщение · #13 надо наверно либо иметь по путям поиска .lib файлов .lib файл с тем же именем, что и в сообщении об ошибке (возможно достаточно просто переименовать, но не уверен), т.к. > LINK : fatal error LNK1104: не удается открыть файл "libboost_regex-vc100-mt-s-1_50.lib" а у тебя в прагме > #pragma comment(lib,"C:\Program Files\boost_1_50\libboost\libboost_regex-vc100-mt-1_50.lib") (если что, либо в свойствах проекта или в сорцах перед инклудом регексовского заголовка прописать макрос BOOST_REGEX_NO_LIB и скармливать через pragma или свойства проекта тот либ файл, что уже есть ARCHANGEL пишет: пути в свойствах проекта прописаны, иначе б не инклудились хидеры буста ну хедеры буста не инклудились бы, если бы пути к включаемым файлам не были прописаны, а пути к либ файлам отдельно же идут |
|
Создано: 18 августа 2012 13:59 · Личное сообщение · #14 |
|
Создано: 18 августа 2012 15:05 · Поправил: neomant · Личное сообщение · #15 |
|
Создано: 18 августа 2012 15:42 · Поправил: _ruzmaz_ · Личное сообщение · #16 ARCHANGEL пишет: Т.е. получается, что не весь пакет качнул? Не знаю какие есть вариации пакетов или инсталеров буста, но в том зипе, который я обычно скачиваю с оффсайта буста, нет вообще почти никаких бинарей (только доки, исходники, конфиги и скрипты разного рода). Зато там есть .mak файлы для разных компилей для сборки регексовской библиотеки, с помощью которых можно получить все нужные .lib и .dll файлы для различных вариантов линковки библиотеки ( Помимо этого есть вариант компилить исходники библиотеки вместе с проектом (в этом случае также понадобиться определять макрос BOOST_REGEX_NO_LIB и от предкомпилируемого заголовка, по-моему, придется отказаться). |
|
Создано: 18 августа 2012 16:36 · Личное сообщение · #17 ARCHANGEL Тут все проще, нужен напильник, ога, boost иногда его требует. 1. Делаешь проект 2. Рантайм делаешь динамический 3. В инклюд добавляешь: Code:
В атаче профит. 5489_18.08.2012_EXELAB.rU.tgz - boost_regex.rar |
|
Создано: 18 августа 2012 16:39 · Личное сообщение · #18 |
|
Создано: 18 августа 2012 17:45 · Личное сообщение · #19 |
|
Создано: 18 августа 2012 19:46 · Личное сообщение · #20 ARCHANGEL пишет: Так вот для проверки валидности этого параметра нужно использовать (ну, не то, чтоб нужно, но хочется) регулярные выражения библиотеки boost. к бусту лучше не привыкать, держать его как справочник или как примеры реализаций чего то. а для практической части или самому писать универсальный велосипед или сделать обзор того что уже есть и выбрать лучший вариант. |
|
Создано: 18 августа 2012 19:54 · Личное сообщение · #21 |
|
Создано: 18 августа 2012 21:15 · Личное сообщение · #22 |
|
Создано: 20 августа 2012 13:04 · Личное сообщение · #23 В общем, проблему решил копированием .lib файла в папку проекта. Как-то не очень понятно, почему указание доп. зависимостей не прагму не работает. Так что сомнительное решение проблемы, но всё же пока оставлю так, посмотрим, будет ли работать, как задуманно. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 24 августа 2012 04:41 · Личное сообщение · #24 Занятная консоль - поиграть - (wincheck гонял ) http://www.codeguru.com/cpp/w-d/console/redirection/article.php/c541/QuickWin--Console-Application-Into-a-Window.htm ну и пробежаться - мож что пригодится http://www.codeguru.com/cpp/w-p/system/processesmodules/ http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/ |
|
Создано: 29 августа 2012 16:41 · Личное сообщение · #25 Продолжаются слёзные истории про кодинг. Требуется накодить простой калькулятор, в котором дополнительно должны присутствовать функции проверки на простоту. Всё, в общем, прекрасно, для работы с большими числами взял BigDigits. Либа прекрасно собралась, приинклудилась к проекту (это вам не буст), и я прекрасно могу её использовать, но стал я замечать, что либа эта считает какую-то лажу. Стал я докапываться до правды, и тут выяснилось, что bdConvFromDecimal (или bdConvToDecimal) выдаёт какую-то хрень, а именно если я в первую задаю строку, в которой расположено число, например, "1234", то после преобразований отсекаются все символы, кроме двух первых, и в результате все вычисления производятся только с числом 12, а не с 1234. Почему так, особо некогда разбираться. Да и не очень хочется. За сим вопрос - юзал ли кто-то библиотеки для работы с большими числами, если юзал, то какие? Тут важно, чтоб они были проверены на практике, гуглом я тоже пользоваться могу. Ну, если вам известно, что за косяки с BigDigits - я вас внимательно. Проект прилагаю, там можно надавить на кнопку в правом верхнем углу от эдит-контрола и увидеть результат корявости, правда, чтоб его понять, надо глянуть в сорцы. 65d8_29.08.2012_EXELAB.rU.tgz - Calculator.rar ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 29 августа 2012 17:57 · Личное сообщение · #26 |
|
Создано: 29 августа 2012 18:10 · Личное сообщение · #27 F_a_u_s_t Ну что ж ты так заболел-то - береги себя За совет спасибо, попробую. А в плане бустовского проекта, если кому интересно, то после переноса вышезамусоленного .lib файла в папку проекта проект стал собираться и даже нормально работать. Софт тот я доделал уже, свои функции он выполняет, т.е. на функционале никак не сказалось моё кривое использование буста, хотя об этом можно было догадаться - тут либо работает, либо нет - остальное уже - ошибки логики. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 29 августа 2012 23:21 · Личное сообщение · #28 ARCHANGEL Да, у приятеля взял тяжа поганять и попал под ливень, а был бухой, а общем сам виноват. А по сабжу пример: Code:
Использовать не просто, а очень просто и эти циферки считает "мгновенно". | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 30 августа 2012 09:49 · Личное сообщение · #29 |
|
Создано: 31 августа 2012 21:39 · Личное сообщение · #30 Либу прилепил, но с ней калькулятор завершается аварийно при запуске и выдает инфу о некоем Access violation, что там за дела - нет времени искать, поэтому сваял так, без больших чисел, что-то ведь надо сдавать, однако Будет больше вермени - попытаюсь разобраться. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 31 августа 2012 23:33 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |