Асинхронное завершение подпрограмм ввода / вывода, указатель на подпрограмму, инкапсулированную в классе - PullRequest
2 голосов
/ 19 марта 2010

Мне было интересно, было ли в любом случае использовать функции типа ReadFileEx, которые требуют указатель на функцию в классе БЕЗ пометки функции как статической? Заранее спасибо. СПР.

Ответы [ 2 ]

2 голосов
/ 08 июня 2010

Вы всегда можете расширить структуру OVERLAPPED, которую вы передаете, чтобы включить указатель на ваш объект.Затем передайте функцию, которая вызывает функцию-член для этого объекта.Примерно так:

typedef struct _MYOVERLAPPED
{
    OVERLAPPED ol;
    MyObject *obj;
} MYOVERLAPPED, *LPMYOVERLAPPED;

void ReadCompleted(DWORD err, DWORD read, LPMYOVERLAPPED overlap)
{
  overlap->obj->foo();
}

Извините, если в приведенном выше коде есть небольшие синтаксические ошибки, прошло много времени с тех пор, как я действительно написал несколько C ++ ...

1 голос
/ 19 марта 2010

Нет, у нестатических функций класса есть подразумеваемый первый аргумент (this), который несовместим с их использованием в качестве обратного вызова для ReadFileEx и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...