У меня есть собственная перекрывающаяся структура для асинхронного ввода-вывода с использованием портов завершения ввода-вывода.
Теперь я получаю уведомление о завершении чтения / записи. Могу ли я передать функцию CALLBACK в качестве параметра в перекрывающейся структуре?
Это позволит мне указать различные функции обратного вызова в зависимости от типа перекрытой структуры, которую я передал
Кому-нибудь повезло с этим?
Создайте свою собственную структуру, полученную из OVERLAPPED
:
struct MyOverlapped : OVERLAPPED
{
CALLBACK MyCallback;
};
Теперь используйте это вместо:
MyOverlapped *o=new MyOverlapped;
o->MyCallback=CallbackHandler;
WriteFile(..,..,MyOverlapped);
Затем, когда вы получите OVERLAPPED
назад вы можете привести его к вашей производной версии:
MyOverlapped *o=static_cast<MyOverlapped*>(overlapped);
И теперь вы можете получить доступ к обратному вызову. Я предполагаю, что вы получаете OVERLAPPED
Экземпляр назад от звонка GetQueuedCompletionStatus
где указатель, который вы получите обратно, будет фактически указывать на вашу производную структуру.
Других решений пока нет …