Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 263
от 22.05.2003, 11:20

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 787
Отправлено ответов: 1778
Активность: 225.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Knignick
Статус: Доверительный
Общий рейтинг: 113.56
[Подробней >>]
Ramzes
Статус: Опытный
Общий рейтинг: 127.77
URL: Microsoft homepage
[Подробней >>]
BOLT
Статус: Опытный
Общий рейтинг: 159.77
URL: В помощь начинающему программитсу Assembler, C/C++
[Подробней >>]
 
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.09
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.06
[Подробней >>]
Pin
Статус: Опытный
Общий рейтинг: 120.39
URL: My HOMEPAGE
[Подробней >>]
 
Avl2k
Статус: Опытный
Общий рейтинг: 125.4
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 782. Доброго времени суток ! у меня пара вопросов: можно ли заглянуть в файлы *.lib, т.е. увидеть их исхо... (ответов: 6)
Вопрос № 784. Здравствуйте ув. эксперты! 1.Возникла проблема с обработкой нажатия клавиш клавиатуры Когда чистая ф... (ответов: 3)

Вопросов: 2, ответов: 9


 Вопрос № 782

Доброго времени суток !
у меня пара вопросов: можно ли заглянуть в файлы *.lib, т.е. увидеть их исходники ? при дебаге их функций ассемблер я вижу, а можно увидеть еще и С++ ?
и еще: по какому принципу подключаются "плагины"? просто выбираются все длл-ки из заданной директории и вызываются их main-процедуры - или как-то по-другому?
ну и еще один глупый вопрос: а чем lib-файлы отличаются от dll-файлов ?
спасибо



Вопрос отправлен: 18.05.2003, 23:39
Отправитель: vova

[Следующий вопрос >>] [Список вопросов]

Отвечает Knignick

Доброе время суток, vova!
Вообще, в понимании компиляторов VC++ и C++ Builder lib-файл попросту содержит заголовки функций а не сам их код. Lib нужен для СТАТИЧЕСКОЙ линковки dll к твоей программе, т.е. если на этапе компиляции достаточно header'ов, то в процессе линковки линкер должен откуда-то брать информацию откуда (по какому адресу) ему вызвывать соотвествующую функцию. В VC++ и в C++ Builder форматы Lib - разые: coff и omf (в Builder't есть утилитка для преобразования - coff2omf)


Ответ отправлен: 19.05.2003, 17:27
Отправитель: Knignick


Отвечает Ramzes

Добрый день, vova!
Что значит "При дебаге их функций" ?
*.lib файл содержит только информацию об экспортируемых функциях. А насчет того, чтобы увидеть код С++ - ты его не увидишь, если у тебя нет исходников.
Ну в принципе да, Программа пытается подключить все длл-ки из данной директории, имя которой если не ошибаюсь должно записываться в реестре.

Ответ отправлен: 19.05.2003, 12:25
Отправитель: Ramzes


Отвечает BOLT

Доброе время суток, vova!
1)lib-файлы нельзя декомпелировать в код C/C++, если там нет отладочной информации(хотя и так вроде бы тоже нельзя), т.к. эти файлы посуте уже набор машинных кодов.А машинные коды, ка ты сам прекрасно знаешь можно только дезассемблировать(в мнемокод ассемблера);
2)Плагины это DLL-файлы, которые используют специальный интерфейс, разработанный программистом той программы, к которой они подсоеденяются;В них нет main-функции, есть только список функций/классов и собственно их реализация, которые использует вызывающий модуль(программа/другая библиотека).
3)DLL - это абривиатура Dinamic Linked Library(переводится: динамически подсоединяемая билиотека);Lib(сокращенно - library)- это статистичечкая библиотека(также к ней идет заголовочный файл - интерфейс) и присоеденяется она с главной программой только при линковке.Надеюсь теперь тебе все понятно!
Счаcтливо!Best compilation&link!

Ответ отправлен: 19.05.2003, 13:14
Отправитель: BOLT


Отвечает Gibbel

Приветствую Вас, vova!
1. *.lib - это уже откомпилированный файл, и увидеть его исходники невозможно (если, конечно, его не на асме писали ;-).
2. Плагины подключаются так, как хочется автору программы. Можно просто тупо перебирать все файлы соответствующего типа в подкаталоге, а можно где-нить хранить список установленных плагинов с путями к ним.
3. *.lib - это библиотека, которая может содержать откомпилированный код какого-либо отдельного самостоятельного модуля, либо же ссылки на другие модули. В чем-то она похожа на файлы *.obj. *.dll - это уже окончательно откомпилированный готовый модуль.

Ответ отправлен: 19.05.2003, 12:20
Отправитель: Gibbel


Отвечает vitya

Добрый день, vova!
Либ файл (грубо говоря) - это список функций и переменных экспортируемых из библиотеки и их адреса. Исходного кода там нет.
Вызываеытся не main функция, а скорее всего несколько функций.
1. LoadPlugin(...);
2. Run(...);
3. Unload(...);
первая его инициализирует, вторая запускает с данными параметрами, третья выгружает плагин.

Ответ отправлен: 19.05.2003, 13:29
Отправитель: vitya


Отвечает Pin

Доброе время суток, vova!
Вообщето lib-файлы содеражат описание функций из DLL.

Ответ отправлен: 21.05.2003, 00:08
Отправитель: Pin


 Вопрос № 784

Здравствуйте ув. эксперты!
1.Возникла проблема с обработкой нажатия клавиш клавиатуры
Когда чистая форма без дополнительних элементов OnKeyUp отрабатывает, а когда добавляеш на форму еще один элемент обработка не происходит.
В чем проблема?(скорее всего форма теряет фокус )
2.Как преобразовать код нажатой клавиши в символ?(для алфавитно цифровых клавиш)



Вопрос отправлен: 19.05.2003, 02:21
Отправитель: m0v8lack

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Добрый день, m0v8lack!
1)Да ты прав - форма теряет фокус.Как бороться:
пишишь:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
KeyPreview = true;
}
тогда после этого сначала будет обрабатываться нажатие клавиш для формы, а если еще есть обработчики для других компонентов, то даже если фокус на них, то все равно первым делом нажатие клавиши обрабатывается для формы.
2)Легко и просто:
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
char KeyString[25];
strcpy(&KeyString[0], "Я нажал ");
KeyString[8] = Key;
KeyString[11] = '';
Application->MessageBox(KeyString , "Что я нажал?", MB_OK);
}
Счастливо!Best compilation&link!

Ответ отправлен: 19.05.2003, 12:56
Отправитель: BOLT


Отвечает Ramzes

Здравствуйте, m0v8lack!
1. Да, скорей всего так оно и есть... Проверь, не стоит ли у тебя на ентом элементе акселератор.
2. Используй функцию
int ToAscii(
UINT uVirtKey, // virtual-key code
UINT uScanCode, // scan code
CONST PBYTE lpKeyState, // key-state array
LPWORD lpChar, // buffer for translated key
UINT uFlags // active-menu option
);

Ответ отправлен: 19.05.2003, 12:30
Отправитель: Ramzes


Отвечает Avl2k

Приветствую Вас, m0v8lack!
2. Символ нажатой клавиши можно получить, обрабатывая не WM_KEYDOWN/WM_KEYUP, а WM_CHAR, куда символ и приходит параметром. Либо можно использовать функции ToAscii, ToUnicode, MapVirtualKey...
Пример:
...
// в обработке WM_KEYDOWN, WM_KEYUP
UINT vCode = wParam; // виртуальный код клавиши
UINT scanCode = (lParam >> 16) & 0xff; // скэн-код
BYTE state[256];
GetKeyboardState( state );
WORD rslt;
if( ToAscii(vCode, scanCode, state, &rslt, 0) == 1 )
{
char ch = (rslt & 0xff);
...
}
С уважением, Avl2k.

Ответ отправлен: 19.05.2003, 11:29
Отправитель: Avl2k



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (32)
Perl (7)
Builder / Delphi (18)
Pascal (31)
Basic / VBA (15)
Java / JavaScript (12)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (44)
Windows NT/2000/XP (33)
"Железо" (32)
Поиск информации (16)
Администратору
Windows NT/2000/XP (21)
Linux / Unix (10)
Юристу
Гражданское право (6)
Семейное право (4)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное