powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Траблы с указателем на функцию
5 сообщений из 5, страница 1 из 1
Траблы с указателем на функцию
    #34444822
Riven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция (в .h заголовке), которую я вызываю из DLL.

Код: plaintext
void RVT_RegisterCallback(int iType, LPVOID pCallback);

Второй параметр - это указатель на callback-функцию, которую нужно описать и реализовать самому.

Собсно код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
class CDataLoader : public CObject
...

// Callback функция
void CALLBACK CDataLoader::OnData(P_DATA data)
{
    return;
}

void CDataLoader::Connect()
{
    // Ее регистрация
    XTW_RegisterCallback( 15 , this->OnData);
}

Ругается - cannot convert parameter 2 from 'void (struct tagDATA *)' to 'void *'

Если же сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
class CDataLoader : public CObject
...

// Callback функция, только уже вне класса
void CALLBACK test(P_DATA data)
{
    return;
}

void CDataLoader::Connect()
{
    // Ее регистрация
    XTW_RegisterCallback( 15 , test);
}

То все ок...

Не вкуриваю я эту тему :) Просьба не пинать, в С++ я можно сказать ламер.
...
Рейтинг: 0 / 0
Траблы с указателем на функцию
    #34444875
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ругается - cannot convert parameter 2 from 'void (struct tagDATA *)' to 'void *'

1) Делать "this->data" нельзя. а вот "&CDataLoader::data" можно. Подробности в справке в разделе pointers to members. Но только работать оно не будет так как надо (см пункт 2)
2) Метод класса при вызове неявно передает указатель this. Т.е. функция должна быть статичной, либо не входить в класс, чтобы работать как Callback.

ЗЫ. Это уже где-то обсуждалось на форуме...
...
Рейтинг: 0 / 0
Траблы с указателем на функцию
    #34445025
Riven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм, сделал функцию статической - все ок. Другая проблема. Все атрибуты класса, с которыми она работает, я тоже сделал статическими. Когда я пытаюсь их использовать в этой функции, вылетает ошибка:
DataLoader.obj : error LNK2001: unresolved external symbol "public: static int CDataLoader::m_test" (?m_test@CDataLoader@@2HA)

Код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class CDataLoader : public CObject
{
...
// Implementation
public:
	static int m_test;
...
	static void CALLBACK OnData(P_DATA data);
};

void CALLBACK CDataLoader::OnData(P_DATA data)
{
	CDataLoader::m_test =  234 ;

	return;
}

Спасибо!
...
Рейтинг: 0 / 0
Траблы с указателем на функцию
    #34445035
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RivenГм, сделал функцию статической - все ок. Другая проблема. Все атрибуты класса, с которыми она работает, я тоже сделал статическими. Когда я пытаюсь их использовать в этой функции, вылетает ошибка:
DataLoader.obj : error LNK2001: unresolved external symbol "public: static int CDataLoader::m_test" (?m_test@CDataLoader@@2HA)

Код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class CDataLoader : public CObject
{
...
// Implementation
public:
	static int m_test;
...
	static void CALLBACK OnData(P_DATA data);
};

void CALLBACK CDataLoader::OnData(P_DATA data)
{
	CDataLoader::m_test =  234 ;

	return;
}

Спасибо!
Правильно тебя обругали, ты не определил переменную CDataLoader::m_test, не отвел под нее компилятор места. А чтобы определить ее в cpp вне тела методов и функций надо написать
int CDataLoad::m_test = 0;
...
Рейтинг: 0 / 0
Траблы с указателем на функцию
    #34445541
Riven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, все супер, все работает :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Траблы с указателем на функцию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]