The OpenNET Project / Index page

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



"Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Доступны два режима работы форума: "Раскрыть нити" и "Свернуть нити".
. "Низкоуровневый переключатель клавиатуры 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

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20, opennews, 14-Сен-11, 22:45  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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