Вопрос № 56049: Уважаемые эксперты! Скажите, пожалуйста, что такое callback-функции (зачем они нужны, какую роль выполняют, когда используются и т.д.)?
И какие виды функций еще бывают (кроме стандартных void, int, char...)?
C уважением, worsvch!...Вопрос № 56106: Пожалуста помогите! Нужно подробное руководство по созданию проектов с БД (желательно Paradox) через ODBC на Microsoft Visual C++ 6.0.
В принципе я имею опыт работы с БД, работал с таблицами paradox в Borland Delphi, Borland C++ и с БД Interbase ...Вопрос № 56109: Всем привет.
Нужен кусочек программы которая бы при нажатии на Button1 загружала 1.gif из папки gifs в окно программы с координатами слева и сверху, которые есть в файле 1.txt и введены через пробел (1 10 10 (1-номер гифа, 10-расст слева,10 расст...
Вопрос № 56.049
Уважаемые эксперты! Скажите, пожалуйста, что такое callback-функции (зачем они нужны, какую роль выполняют, когда используются и т.д.)?
И какие виды функций еще бывают (кроме стандартных void, int, char...)?
C уважением, worsvch!
Отправлен: 20.09.2006, 08:20
Вопрос задал: Worsvch (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Www2
Здравствуйте, Worsvch!
Простейший пример: функция сортировки qsort из библиотеки stdlib. Ей нужно передать в качестве одного из параметров функцию для сравнения элементов таблицы. Так вот функция для сравнения элементов и есть callback-функция, она вызывается функцией сортировки, когда нужно сравнить два элемента.
base - указатель на сортируемую таблицу,
nmemb - количество элементов (строк таблицы),
size - размер одного элемента (строки) таблицы.
int (*compar)(const void *, const void *) - шаблон callback функции, первый и второй параметры - указатели на сравниваемые элементы (строки) таблицы. Функция дожна возвращать целое число
0 - если элементы (строки) равны,
<0 - если первый элемент в отсортированной таблице должен стоять перед вторым,
>0 - если первый элемент в отсортированной таблице должен стоять после второго.
Пусть надо отсортировать массив целых чисел:
int array[10];
//callback-функция для сравнения чисел
int compint(const void *ptr1, const void *ptr2)
{
int *i1 = (int *)ptr1;
int *i2 = (int *)ptr2;
return *i1 - *i2;
}
//Вызов функции qsort для сортировки массива из 10 чисел
qsort(array, 10, sizeof(array[0]), compint);
После этого массив целы чисел будет отсортирован в порядке возрастания.
void, int, char - это типы возвражаемого функцией результата, а не "виды функций".
void - ничего не возвращает, int - возвращает целое число, char - возвращает байт.
Примеры:
//печатает строку, ничего не возвращает
void print_hello(void)
{
fprintf(stdio, "Hello!
");
}
//Возвращает квадрат числа
int square(int x)
{
return x * x;
}
--------- Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: Www2 (статус: 10-ый класс)
Ответ отправлен: 20.09.2006, 08:51
Отвечает: ADSota
Здравствуйте, Worsvch!
2. int, char... это просто типы значений возвращаемых функцией... И этот тип может быть любым, какой придумаете.
1. Callback функция - это функция, которая вызывается не из вашего кода. То есть, например вы регистрируете свою функцию, чтобы срабатывала при нажатии на клавишу - то операционная система при нажатии клавиши запустит вашу процедуру.
--------- Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 20.09.2006, 08:55 Оценка за ответ: 5 Комментарий оценки: Спасибо! Самый понятный и четкий ответ. Теперь я понял, что такое callback. Просто,я задавал этот вопрос и в PHP. но ответ я там совсем не понял
Отвечает: dentist
Здравствуйте, Worsvch!
во первых не виды функций а типы данных возврощаемых функциями.
а callback это, что-то вроде экспорта
--------- "Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 4-ый класс)
Ответ отправлен: 20.09.2006, 09:34
Отвечает: Morgion
Здравствуйте, Worsvch!
Callback-ф-я - это ф-я определяемая приложением, но вызываемая операционной системой ( в упрощённом
варианте). Если относительно Windows, то callback это например WndProc (система вызывает эту ф-ю пр
;и приходе сообщения),EnumChildProc - при вызове EnumChildWindows указывается ещё параметр - адрес этой ф-и. Так же для
таймеров могут существовать callback функции.
В принципе можно и без них, но с ними проще и логичнее. Например WndProc может и не быть (если DispatchMessage не
вызывать и самому определять повидение программы).
Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 20.09.2006, 10:21 Оценка за ответ: 5 Комментарий оценки: Спасибо за подробный ответ!
Вопрос № 56.106
Пожалуста помогите! Нужно подробное руководство по созданию проектов с БД (желательно Paradox) через ODBC на Microsoft Visual C++ 6.0.
В принципе я имею опыт работы с БД, работал с таблицами paradox в Borland Delphi, Borland C++ и с БД Interbase в Borland C++ и через jsp страницы, также работал в MS Access.
Мне нужно работать обязательно через ODBC и в Visual C++ 6.0, так требует учитель.
Отправлен: 20.09.2006, 18:01
Вопрос задал: Mikutu (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Mihasic
Здравствуйте, Mikutu!
С Paradox не имел дела, но если е драйвер в ODBC поставить, то проблем быть не должно.
Наиболее полное описание работы с ODBC, которое я читал - MSDN, но читать там много (хотя как смотреть) и на английском.
Для основ работы с ODBC можешь нагуглить класс CSQLDirect - через него был мой первый опыт работы с ODBC (правда тогда это было MFC приложение, но посмотрев его простой исходник можно разобраться).
Ответ отправил: Mihasic (статус: 8-ой класс)
Ответ отправлен: 20.09.2006, 18:18 Оценка за ответ: 4 Комментарий оценки: MSDN у меня стоит, но я хочу почитать что-нибудь на русском языке. Лучше не использовать доп. комнонентов так как их придется потом тащить в универ и там договариватся с админами чтобы они их поставили, короче это сплошной гиморой
Вопрос № 56.109
Всем привет.
Нужен кусочек программы которая бы при нажатии на Button1 загружала 1.gif из папки gifs в окно программы с координатами слева и сверху, которые есть в файле 1.txt и введены через пробел (1 10 10 (1-номер гифа, 10-расст слева,10 расст сверху)). всем заранее благодарен. и жду вашей помощи. знаю что нужны какие то дополнительные компоненты, установил rxlib.
вот примерно как она должна выглядить.
http://f.foto.radikal.ru/0609/796549ca2f8f.jpg
Отправлен: 20.09.2006, 18:39
Вопрос задал: Nur87 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Sergey A. Wedensky
Здравствуйте, Nur87!
Однако, вопрос у Вас расплывчатый. Под какую платформу пишете (ну ладно, видимо винды:), на чем (понятно, на C, судя по теме рассылки) - MFC, .NET, чистый WinAPI?
Если предположить, что пишете под Win32 на чистом API...
Ну, с чтением из текстового файла, думаю, проблем не возникает:
см. #1 в приложении.
Прочитать GIF можно, например, с помощью GDI+ (входит в поставку Win2000 и выше). Конструируете объект Bitmap (из пространства имен Gdiplus) из имени файла, получаете у него HBITMAP (дескриптор GDI), копируете его (чтобы можно было уничтожить Bitmap):
см. #1 в приложении.
Ну, а отобразить его проще всего, наверно, в контроле STATIC со стилем SS_BITMAP на диалоговом окне. Поместить этот контрол в нужные координаты можно при помощи SetWindowPos, например:
см. #3 в приложении.
Если у Вас не диалог, можно обрабатывать WM_PAINT и рисовать картинку в DC окна (BitBlt()), а можно тоже создать дочерний STATIC, или еще как угодно.
Дерзайте.
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: 2-ой класс)
Ответ отправлен: 20.09.2006, 19:19