Доброго всем времени суток. Пишу программу, возникла такая проблема. Есть либа, эеспортирующая функции, одна из функций принимает адрес калбака, собсно пытаюся передать метод класса, точнее пока только получить его адрес. Собсно вот ерор: Error 9 error C3374: can't take address of 'iPhone::NotificationProc' unless creating delegate instance d:\WRKPLS\_Creative\iTool\Research\tst\iPhone.cpp 14 tst Это private части класса: Код (Text): delegate void AMDNS (am_device_notification_callback_info* i); //Делегат так для проб..которые тоже ничем не увенчалися...( static const void NotificationProc(am_device_notification_callback_info *info); Это прототипы: Код (Text): struct am_device_notification_callback_info { struct am_device *dev; unsigned int msg; } __PACK; typedef void(*am_device_notification_callback)(struct am_device_notification_callback_info *); Вот код который вызывает ошибку: Код (Text): retval = AMDeviceNotificationSubscribe(&iPhone::NotificationProc, 0, 0, 0, ¬if); Вопрос: Как можно получить адрес этого нехорошего метода? Как лучше поступить в таком случае? Делегат с таким кодом создаётся нормально: Код (Text): AMDNS^ nc=gcnew AMDNS(&iPhone::NotificationProc); Но сцуко как потом получить из него адрес метода? Пробовал динамик каст к калбаку этого делегата...как ни странно Acces Viloation..или как там... Код (Text): retval = AMDeviceNotificationSubscribe((am_device_notification_callback)nc->GetMethodImpl, 0, 0, 0, ¬if); Error 5 error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'am_device_notification_callback' d:\WRKPLS\_Creative\iTool\Research\tst\iPhone.cpp 14 tst Error 6 error C2373: 'iPhone::NotificationProc' : redefinition; different type modifiers d:\WRKPLS\_Creative\iTool\Research\tst\iPhone.cpp 23 tst
Ура! MSDN ruleZZ! Код (Text): delegate void NotifiCallbackDelegate (am_device_notification_callback_info* i); [System::Runtime::InteropServices::DllImportAttribute("iTunesMobileDevice.Dll",CharSet=System::Runtime ::InteropServices ::CharSet::Ansi)] extern "C" __DLLIMPORT mach_error_t AMDeviceNotificationSubscribe(NotifiCallbackDelegate^ callback, unsigned int unused0, unsigned int unused1, unsigned int dn_unknown3, struct am_device_notification **notification); Если интересно конечно) CLOSED