Автор Тема: Эй, разработчики!  (Прочитано 1153 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Эй, разработчики!
« : 13 Января 2016, 19:29:27 »
Куда все делись-то? ;)

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #1 : 14 Января 2016, 06:24:41 »
Тебе удалось удачно скомпилить 75.1?

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #2 : 14 Января 2016, 07:49:02 »
Да, я вот в воскресенье баг нашёл, откуда ноги растут, Дориану написал, конкретно в коде указал, что не так, но он пока не ответил мне. Я сам не знаю пока, как грамотно фикс написать, т.к. нужно проанализировать весь код K-Meleon'а, как он работает, на это пару недель уйдёт. Вот, что я писал:

From: Oleg
To: Dorian
Date: 01/11/2016 04:34AM

Hello, Dorian. I have been using KM for half a year now, and I have noticed a rare but annoying bug - sometimes when I right click on some link and then click "Open In New Tab", the click is not registered somehow, the context menu disappears, and I have to do this all over again. It opens successfully on the second time. The websites that are affected by this are Youtube and Discogs.com.

You can reproduce this bug by starting the browser, going to some Youtube video (this one, for example: https://www.youtube.com/watch?v=qir0XojwDcU), and then right clicking the uploader profile button (TubeTechHelp), and clicking "Open In New Tab". The tab won't open on the first time, but when you do this the second time, it will open with no problems.

I have looked through the KM code, and it looks like I have found the source of the bug. When new tab is not opened, GetLinkTitleAndHref(m_contextNode, url, title) function in CBrowserTab:surprised smileynOpenLinkInNewTab() returns FALSE, and because of that OpenURLInNewTab(url, m_pWindow->GetDocURL(m_contextNode), FALSE) isn't called. The function fails because of NS_ENSURE_TRUE(node, FALSE) check in MozUtils.cpp, line 259 (because node == 0). I also figured out that when I comment out the line "mpBrowserView->m_contextNode = nullptr;" (BrowserGlue.cpp, line 73), the problem disappears.

Obviously, to comment out some unknown line (to me) is not a good fix, so I'm gonna look some more into the code to find some better way to fix this, but I'm not very familiar with how KM works right now. Maybe it's just a simple problem, could you take a look at it too?

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #3 : 14 Января 2016, 07:55:48 »
Глюк есть, если включены JS. Если их выключить - все открывается нормально :)
А чем ты компилировал исходник?

Можешь эти (https://files.fm/down.php?i=zn4xjuhd&n=file.rar) два файла в проекте заменить и кинуть мне скомпилированные k-meleon.exe и macros.dll?
« Последнее редактирование: 14 Января 2016, 08:03:09 от Aizek »

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #4 : 14 Января 2016, 11:09:15 »
Цитировать
Если их выключить - все открывается нормально
Там и со скриптами всё нормально должно быть, косяк в коде K-Meleon'а.

Цитировать
кинуть мне скомпилированные k-meleon.exe и macros.dll?
Щас не могу, на работе.

Release-версию скомпилировать несложно, у меня проблема была получить Debug-билд, чтобы можно было исходники в отладчике анализировать, пришлось 74-ую версию для этого использовать.

Компилируется всё Visual C++, который является частью Visual Studio. Для 75.1 использовалась VS 2010, для 76 - VS 2013. Для VS 2013 требуется Windows 7. VS Express Edition не подходит, т.к. там официально нет MFC, поэтому нужна VS2010 Professional для 75.1, либо VS2013 Community/Professional для 76. Community Edition бесплатная (в прошлом году Microsoft расщедрился), поэтому советую экспериментировать с 76-ой версией.

В общем, надеюсь, у тебя есть 7-ая винда. Качаешь ISO-шник "Visual Studio Community 2013 с обновлением 5" отсюда https://www.visualstudio.com/ru-ru/downloads/download-visual-studio-vs.aspx, ставишь (это долго, час где-то ставится), затем берёшь исходник 13 декабря K-Meleon 76 Beta2 (3 пока не удастся скомпилировать) отсюда http://sourceforge.net/p/kmeleon/source/ci/be9d4d6c6d9a8a18f7611c0f6cd57cda4b192997/, кладешь в папку без пробелов, вроде C:\kmeleon-source, и в ней будут папки CVSROOT, k-meleon и др.. Затем качаешь SDK 76 из этой темы http://kmeleonbrowser.org/forum/read.php?2,135763, кладёшь папку xulrunner-sdk в папку C:\kmeleon-source.

Это всё, что нужно. Дальше открываешь солюшен K-Meleon10.sln, и можно компилировать. Там будут тонкости всякие, которые я сейчас все не вспомню. Пока студию установи, а вечером я тебе помогу собрать exe-шник.

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #5 : 14 Января 2016, 11:21:53 »
У меня VS 2015 Enterprise

Все это я сделал, пути настроил...  Не компилится ибо куча ошибок вылазит в коде.
Начиная с этого sdk и заканчивая ошибками в самом коде. Вот и не ясно, качать VS 2010 или еще что-то придумывать...

Я хочу скомпилить именно 75.1, не 76...
« Последнее редактирование: 14 Января 2016, 11:25:50 от Aizek »

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #6 : 14 Января 2016, 11:38:09 »
2015 не подойдёт, там же компилятор другой, его даже последний Firefox только месяц назад начал поддерживать. Ставь 2010-ую, Professional или другую подобную, не Express. В таких вопросах лучше ставить рекомендованную версию, потому что от компиляции другими компиляторами/сборки другими линкерами практически всегда будут проблемы совместимости (там даже Microsoft вроде специально грабли ставит, чтобы такого не делали), а если и соберётся, то при исполнении могут вылезти неочевидные баги и прочая хурма. Так что только 2010-ая тебе нужна.

Service Pack 1 на 2010-ую не забудь накатить.
« Последнее редактирование: 14 Января 2016, 11:40:27 от Oleg_M »

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #7 : 14 Января 2016, 11:47:48 »
О чем и речь...  Но я не нашел никаких рекомендаций по компиляции... 
Код очень кривой, много упрощений, которые в последующих версиях приводят к ошибкам при компиляции...
А адаптировать не реально, ножно знать всю механику работы...  Там так наворотили, что без поллитры не разобраться ))
Нет, чтобы по стандарту писать ))

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #8 : 14 Января 2016, 12:01:33 »
Не знаю, вполне себе нормальный код 2002-го года. Просто его 10 лет один Дориан поддерживает, поэтому и не документирует особо. У Файрфокса, понятное дело, доки на каждом шагу, но Файрфоксом пользуется полмиллиарда человек, а Хамелеоном всего-то тыщ 50.

MFC, к примеру, нигде не стандартизирован, это чисто MS-технология, так что их личное дело, что с ней делать.
« Последнее редактирование: 14 Января 2016, 12:04:19 от Oleg_M »

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #9 : 14 Января 2016, 12:12:05 »
Дело не в MFC. Дело в самом стиле написания. Например преобразования типов зачастую пропускаются. В старых компиляторах это не вызывает ошибки, а новый ругается. По хорошему надо всегда делать явное преобразование типов, т.к. стандарт может измениться
К примеру:
char s;
DWORD a;
a=&s;

Все хорошо, адрес строки s - 4 байта. DWORD тоже 4 байта.
А если стандарт поменяется и адрес будет занимать уже 8 байт?
При явном преобразовании a=(DWORD)&s;  компилятор выдаст предупреждение, если размер адреса переменной s не будет совпадать с размером переменной a.
« Последнее редактирование: 14 Января 2016, 12:15:27 от Aizek »

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #10 : 14 Января 2016, 12:22:22 »
Это где ты такое в коде нашёл? :D
Надо же не DWORD, а char* использовать, ну или какой-нибудь LPCHAR хотя бы.

DWORD - это кстати виндовский тип, нестандартный.
« Последнее редактирование: 14 Января 2016, 12:26:28 от Oleg_M »

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #11 : 14 Января 2016, 12:28:20 »
Это просто пример и поверь так делать можно и даже будет отлично работать.
Ведь по сути адрес на строку это и есть DWORD )))
Там в SDK идет переопределение виндовых типов...  Первые ошибки при компиляции вылезли именно на этом )

Оффлайн Oleg_M

  • Участник форума
  • Сообщений: 23
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #12 : 14 Января 2016, 12:44:10 »
Ох, дядь ;D Да я ж не сомневаюсь, что будет работать (я и с ассемблером баловался, и с OllyDbg ковырялся), но грамотные люди за такое по рукам могут надавать :D Я, конечно, больше теоретик, не знаю как там у большинства программистов принято, но я бы в своём проекте так никогда не написал.

SDK я пока вообще не смотрел, ничего не скажу по этому.

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #13 : 14 Января 2016, 12:56:26 »
Ну это ты зря, это же не чит, а фича! Просто надо понимать, что и как работает, т.к. легко замутить такой мощнейший баг, что потом не раскопаешь )))  Все эти преобразования как раз из ассемблера и пошли.

Ну да ладно, качаю 2010 и буду дальше пробовать. Если что - спрошу у тебя, как у знающего ;-)

Оффлайн Aizek

  • Участник форума
  • Сообщений: 40
    • Просмотр профиля
Re: Эй, разработчики!
« Ответ #14 : 14 Января 2016, 17:54:26 »
Требует ToolsVersion="12.0" (v120_xp)  а в 2010 вроде как v100
Вроде как этот тулсет от 2013...  Как решил проблему?
« Последнее редактирование: 14 Января 2016, 17:59:42 от Aizek »