The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Отправлено Dejavu_Dmitry, 08-Окт-11 01:08 
> Main.cpp: В функции «void* threadFunc(void*)»:
> Main.cpp:597:34: ошибка: cast from «void*» to «int» loses precision
> [-fpermissive]
> gmake[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1
> ---
> Мне вот интересно, нах...я народ скупает новое железо, что б туда впиндюрить
> 32-битную ОСь
> ---
> Ах да, у меня клава и мышь PS/2, как жить?  Драйвер
> input не вапаян в ядро.

Понравилась идея автора. Скачал, попытался скомпилировать. Наткнулся на такую же проблему, те же ошибки.

>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘bool >checkEventFilter(char*)’:
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:453:105: warning: passing NULL to >non-pointer argument 6 of ‘int pcre_exec(const pcre*, const pcre_extra*, const char*, >int, int, int, int*, int)’ [-Wconversion-null]
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void >executeCommand(int)’:
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:614:71: warning: cast to pointer from >integer of different size [-Wint-to-pointer-cast]
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp: In function ‘void* threadFunc(void*)’:
>
>/home/dejavu/downloads/loloswitcher_0_20/Main.cpp:628:31: error: cast from ‘void*’ to >‘int’ loses precision [-fpermissive]
>make[2]: *** [CMakeFiles/loloswitcher.dir/Main.cpp.o] Ошибка 1
>make[1]: *** [CMakeFiles/loloswitcher.dir/all] Ошибка 2
>make: *** [all] Ошибка 2

Я использую 64-битную систему и соответственной битности компилятор.
Открыл исходники, посмотрел. Заметил, что автор оставил кое-какие строки закомментированными. Имея невообразимо малый опыт программирования и такой же величины знание английского (сообщения компилятора выдавались на английском) попытался исправить код так, чтобы наконец использовать во благо это воплощение хорошей авторской идеи.
Понемногу убивал предупреждения. Убил ошибку. Запустил бинарник. Работает, но после переключения на нужную раскладку вылетало с ошибкой сегментирования.
В итоге, чтобы избавиться от всех предупреждениях и ошибок, и чтобы работало без вылетов мне пришлось сделать следующие манипуляции с сырком.

1. Строку 453 файла Main.cpp ИЗМЕНИТЬ следующим образом:
Было:
/*453*/        count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, NULL, ovector, 30);

Стало:
/*453*/        count=pcre_exec( (pcre *)config.getEventFilterCompile(), NULL, text, strlen(text), 0, 0, ovector, 30);

2. Строку 614 файла Main.cpp ЗАкомментировать, а в свою очередь РАСкомментировать предыдущую строку - 613. В итоге стало так:
/*613*/        int result = pthread_create(&thread, NULL, threadFunc, &keyboardLayerNum);
/*614*/        //int result = pthread_create(&thread, &threadAttr, threadFunc, (void*)keyboardLayerNum);

3. Строку 628 файла Main.cpp ЗАкомментировать, а в свою очередь РАСкомментировать предыдущую строку - 627. В итоге стало так:
/*627*/        int keyboardLayerNum = * (int *) arg;
/*628*/        //int keyboardLayerNum = (int) arg;

4. Строку 82 файла EventQueue.cpp ИЗМЕНИТЬ следующим образом:
Было:
/*82*/        count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, NULL, ovector, 30);

Стало:
/*82*/        count=pcre_exec( (pcre *)regexpCompile, NULL, queueSequence, strlen(queueSequence), 0, 0, ovector, 30);


Сохранил изменения в файлах исходников. Выполняю команду 'make' и наблюдаю вывод:
[ 20%] Building CXX object CMakeFiles/loloswitcher.dir/Main.cpp.o
[ 40%] Building CXX object CMakeFiles/loloswitcher.dir/KeyLayout.cpp.o
[ 60%] Building CXX object CMakeFiles/loloswitcher.dir/Config.cpp.o
[ 80%] Building CXX object CMakeFiles/loloswitcher.dir/ParseHelper.cpp.o
[100%] Building CXX object CMakeFiles/loloswitcher.dir/EventQueue.cpp.o
Linking CXX executable loloswitcher
[100%] Built target loloswitcher

Бинарник готов. Запускается, пока не вылетает. После установки продвинутой пищалки для встроенного в компьютер динамика 'beep' я даже услышал (при переключении раскладки) невообразимо точной частоты и длительности писки встроенных динамиков моего скромного ThinkPad`a...
Автору большое спасибо. Желаю удачи и улучшения/исправления кода.
А всем страждущим посмотреть этот ролик и не ныть по каждому поводу.
Try this --> http://www.youtube.com/watch?v=TzWc7VBmTPI

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру