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

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


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

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

Выпуск № 610
от 19.10.2004, 23:40

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


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

vitya
Статус: Профессиональный
Общий рейтинг: 109.75
[Подробней >>]
Василевский Александр
Статус: Опытный
Общий рейтинг: 116.2
[Подробней >>]


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

Вопрос № 1963. Приветствую всех кто меня еще помнит и всех, кто уже не помнит! :) Вот, возник у меня вопрос, над ко... (ответов: 2)
Вопрос № 1964. Добрый день! Как можно реализовать на си имитацию нажатия клавиши, т.е. не послать сообщение конкрет... (ответов: 1)

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


 Вопрос № 1963

Приветствую всех кто меня еще помнит и всех, кто уже не помнит! :)
Вот, возник у меня вопрос, над которым я сижу уже третий час...
Вот, к примеру, такой кусок кода:

typedef void (CALLBACK aNOT) (int* ii);
typedef aNOT* P_NOTa;
class zzz
{
public:
void CALLBACK zasd (INT *f) { /**/ } // Line X1
};
BOOL aaa(P_NOTa ap)
{
return TRUE;
}
void CALLBACK asd (INT *f) // Line X2
{
// stuff
}
void tmpf()
{
zzz z;
aaa(asd); // Line X3
aaa(z.zasd); // Line X4
}

На строчке X4 возникает ошибка "error C2664: \'aaa\' : cannot convert parameter 1 from \'void (int *)\' to \'void (__stdcall *)(int *)\'"
На строчке X3 ошибки НЕ ВОЗНИКАЕТ!
Видимо, проблема в том, что zasd() является функцией-членом?
Объявления в строчках X1 и X2, в принципе, одинаковые.
Вопрос: как мне передать в качестве параметра ф ункцию zasd?
Желательно не менять типы в typedef и объявление функции aaa.



Вопрос отправлен: 16.10.2004, 17:02
Отправитель: baldr

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

Отвечает vitya

Добрый день, baldr!
1. зачем делать указатель на указатель функции?
2. да проблема именно в этом. Указатели на нестатические функции - члены делаются по другому.
3. Обращение к функции - члену делается через :: и кроме того перед ними обязательно надо ставить & - &zzz::zasd
4. делайте более приятные идентификаторы, а to читать западло.

Ответ отправлен: 17.10.2004, 16:28
Отправитель: vitya


Отвечает Василевский Александр

Здравствуйте, baldr!
Ошибка заключается в следующем: Всем функциям-методам неявно передаётся параметр this, указывающий на данные класса. Т.е в Вашей программе функция zasd объявляется так:
void CALLBACK zasd ( xxx* this, INT* f );
А функция asd объявляется как её и положено:
void CALLBACK asd ( INT *f );
Передать функцию zasd без изменения типа aNOT не удастся. Придётся объявлять функцию zasd статической - но тогда Вы не сможете обратиться к членам класса, либо менять определение aNOT - но тогда Вы не запустите asd. Подумайте, может не следует вызывать и обычные функции и методы класса.
PS. Передать метод zasd в функцию aaa мне так и не удалось.


Ответ отправлен: 18.10.2004, 09:41
Отправитель: Василевский Александр


 Вопрос № 1964

Добрый день!
Как можно реализовать на си имитацию нажатия клавиши, т.е. не послать сообщение конкретному процессу, а съимитировать.(как нажатие CapsLock, тока мне не CapsLock нужен, а вообще)



Вопрос отправлен: 16.10.2004, 23:37
Отправитель: Dmitriy (nospam@hitv.ru)

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

Отвечает Василевский Александр

Доброе время суток, Dmitriy!
Если Вы программируете в Windows, то в WinAPI существуют функции:
keyb_event для имитации клавиатуры
mouse_event для имитации мыши
SendInput для имитации клавиатуры и мыши (рекомендует Platform SDK).
Попробуйте использовать эти функции.


Ответ отправлен: 18.10.2004, 09:06
Отправитель: Василевский Александр



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (25)
C / C++ (17)
Perl (8)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (9)
Java / JavaScript (7)
PHP (19)
Криптография (8)
WinAPI (15)
Радиоэлектроника (15)
Пользователю
Windows 95/98/Me (43)
Windows NT/2000/XP (60)
"Железо" (37)
Поиск информации (20)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (16)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (5)

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





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное