Форум программистов, компьютерный форум CyberForum.ru

Передать указатель метода в функцию С++ - C++

Восстановить пароль Регистрация
 
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.04.2014, 16:07     Передать указатель метода в функцию С++ #1
Пишу простейшее сетевое приложение.
Оформил всё в одном классе. Далее подключил этот класс к диалоговому.

Есть некоторая функция:
void transmit::dispatcher_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *packet);
Находится она в классе transmit.
Объявил объект Mytransmit в диалоговом классе.


Есть также функция:
pcap_loop(Mytransmit.adhandle, 0 ,, NULL);

3 параметр должен быть указатель на dispatcher_handler.

Как мне передать его ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
05.04.2014, 16:22     Передать указатель метода в функцию С++ #2
Проще всего передать указатель на свой класс transmit и уже работать с указателем на класс, дёргая его методы и т.д
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.04.2014, 16:28  [ТС]     Передать указатель метода в функцию С++ #3
Функция не моя, библиотечная. Так что приходится плясать по её правилам.
-=ЮрА=-
Заблокирован
Автор FAQ
05.04.2014, 16:41     Передать указатель метода в функцию С++ #4
Ну передай указатель на функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
class SomeClass
{
    public:
    static int one_plus_num(int num){
        return 1 + num;
    }
};
 
int main()
{
    int (*fun_ptr)(int num) = 0;
    fun_ptr = &SomeClass::one_plus_num;
    cout<<fun_ptr(6)<<endl;
    return 0;
}
http://codepad.org/eN2Twzi9

Добавлено через 4 минуты
Вот вариант если функция глобальная
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
int g_one_plus_num(int num){
        return 1 + num;
    }
 
class SomeClass
{
    public:
    static int one_plus_num(int num){
        return 1 + num;
    }
};
 
int main()
{
    int (*fun_ptr)(int num) = 0;
    fun_ptr = &SomeClass::one_plus_num;
    cout<<fun_ptr(6)<<endl;
    fun_ptr = g_one_plus_num;
    cout<<fun_ptr(10)<<endl;
    return 0;
}
http://codepad.org/CjNTzFyn
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.04.2014, 16:58  [ТС]     Передать указатель метода в функцию С++ #5
Спасибо. Буду разбираться. Немного странный синтаксис. Почему указатель инициализируется классом а не объектом, видать, компилятор автоматически создает объект, когда через этот указатель обращаются к полям.
Ладно появится время надо читать про С++.
-=ЮрА=-
Заблокирован
Автор FAQ
05.04.2014, 17:05     Передать указатель метода в функцию С++ #6
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Немного странный синтаксис.
где именно?
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Почему указатель инициализируется классом а не объектом
- что ты имел ввиду?

Добавлено через 1 минуту
Через указатель на функцию можно либо обратиться к статическому методу класса либо глобальной функции, в остальных случаях прямой доступ к методам класса без использования указателя на класс не возможен

Добавлено через 2 минуты
Если ты имел ввиду это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
class SomeClass
{
    public:
    int one_plus_num(int num){
        return 1 + num;
    }
};
 
int main()
{
    int (*fun_ptr)(int num) = 0;
    fun_ptr = &SomeClass::one_plus_num;
    cout<<fun_ptr(6)<<endl;
    return 0;
}
то получишь ошибку линковщика http://codepad.org/c2LPMvQq
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
05.04.2014, 17:08  [ТС]     Передать указатель метода в функцию С++ #7
Я имел введу не ваш код, а синтаксис с++,я начинающий,не судите строга.
Вот здесь идетинициализация указателя классом,а не объектом.
fun_ptr = &SomeClass::one_plus_num;
Вот я и подумал, на данном этапе компилятор вычисляет относительный адрес до функции-члена,
А когда в коде встречается оператор обращения к функции класса, компиль создает, уже объект, тока пользователь этого не видит, и с помощью вычисленного заранее относительного адреса, определяет необходимый адрес в памяти. Это я так, спортивный интерес просто.
-=ЮрА=-
Заблокирован
Автор FAQ
05.04.2014, 17:13     Передать указатель метода в функцию С++ #8
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Я имел введу не ваш код, а синтаксис с++,
- мой код был приведен в пример как сделать поинтер на функцию
Цитата Сообщение от Abraziv__ Посмотреть сообщение
А когда в коде встречается оператор обращения к функции класса, компиль создает, уже объект, тока пользователь этого не видит, и с помощью вычисленного заранее относительного адреса, определяет необходимый адрес в памяти. Это я так, спортивный интерес просто.
- статический метод на то и статический, что объект класса для него не обязателен, по сути это голая никак не привязанная к классу функция т.к внутри данного метода нет this класса. Думаю ты хотел дёрнув метод через указатель создать где то целый класс я прав?
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
06.04.2014, 13:22  [ТС]     Передать указатель метода в функцию С++ #9
Нет Юрий, я просто рассуждал. Спасибо за помощь, завтра буду пробовать. Я больше программировал низкоуровневый код,МК, драйвера и тд. С ООП проблемы огромные, точнее знаний нет.

Добавлено через 10 часов 16 минут
Я делаю следующее:
C++
1
2
void(transmit::*p)(u_char *,const struct pcap_pkthdr *, const u_char *) = &transmit::dispatcher_handler;
pcap_loop(Mytransmit.adhandle, 0 ,p, NULL);
Пишет, что
pcap_loop: невозможно преобразовать параметр 3 из "void (__thiscall transmit::* )(u_char *,const pcap_pkthdr *,const u_char *)" в "pcap_handler"

а pcap_handler это:

typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);

Добавлено через 1 час 29 минут
разобрался.

Добавлено через 8 часов 5 минут
ЮРА, вы не знаете случайно, почему при вызове MyDlg->UpdateData(TRUE); вылетает с ошибкой ?

Добавлено через 13 минут
Видать, потому что из другого потока запустил.
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
09.04.2014, 14:48  [ТС]     Передать указатель метода в функцию С++ #10
-=ЮрА=-
Я хотел у вас спросить.
За каждым элементом правления в MFC можно закрепить переменную значения или управления. В мастере есть опция, которая помогает отслеживать для переменной значения, превышение или преуменьшение значения. Когда происходит преув. или преумен. значения выскакивает сообщение которое уведомляет пользователя.
У меня, что то случилось с одной переменной и сообщение перестало выскакивать. Как можно исправить ?
-=ЮрА=-
Заблокирован
Автор FAQ
09.04.2014, 20:27     Передать указатель метода в функцию С++ #11
Цитата Сообщение от Abraziv__ Посмотреть сообщение
У меня, что то случилось с одной переменной и сообщение перестало выскакивать. Как можно исправить ?
- не возможно если не менялся тип.
Поясню :
Если скажем был тип INT то при вводе с символами отличными от +-0...9 выскакивало бы сообщение об ошибке. А вот если изменить тип на CString то конечно никакой проверки на корректность вводимых данных осуществляться не будет. Покажи ветку кода где не появляется сообщение об ошибке.
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
10.04.2014, 04:12  [ТС]     Передать указатель метода в функцию С++ #12
А вы не знаете случаем - "Как сделать событие на нажатие отключенной кнопки?".
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.04.2014, 07:00     Передать указатель метода в функцию С++ #13
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Немного странный синтаксис.
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Почему указатель инициализируется классом а не объектом
Это смертельный коктейль императивщины языка Си и ОО концепта. Юзай smalltalk или дэ, лучше аду.
-=ЮрА=-, инициализировать адреса знаковым типом... ну ты понял, брат.
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
10.04.2014, 07:40  [ТС]     Передать указатель метода в функцию С++ #14
Точно )))))
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.04.2014, 07:49     Передать указатель метода в функцию С++ #15
Цитата Сообщение от Abraziv__ Посмотреть сообщение
Точно
свд была когда-то женой.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 07:50     Передать указатель метода в функцию С++
Еще ссылки по теме:

Передать в неуправляемую функцию указатель на указатель C++
как в функцию передать указатель на матрицу C++
Передать указатель в функцию C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Abraziv__
-52 / 3 / 0
Регистрация: 05.02.2013
Сообщений: 347
10.04.2014, 07:50  [ТС]     Передать указатель метода в функцию С++ #16
)))))))))))))))))))))
Yandex
Объявления
10.04.2014, 07:50     Передать указатель метода в функцию С++
Ответ Создать тему
Опции темы

Текущее время: 00:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru