Я хочу использовать плагин NPAPI в своем приложении, и я создал функции, предоставляемые браузером для плагина. Загружать библиотеку, инициализировать и запускать, все идет хорошо, пока не дойдет до функции NPP_New. Эта функция вызывает сбой, потому что указатель NPP (вместо этого указывает вместо 0 - функция возвращает код ошибки 2 «Invalid Instance», а не сбой). Я думаю, что есть проблема с доступом к памяти. Нашел несколько способов совместного использования памяти, но я не знаю точно, что подходит в этом случае.Использование плагина NPAPI в моем приложении
// ...
char szMimeType[] = "application/x-some-plugin";
NPP_t npp; npp.pdata = 0; npp.ndata = &npp;
UINT result = NPP_New(szMimeType, &npp, NP_FULL, 0, 0, 0, NULL);
// ...
Какой вид аварии вы получаете? Использование npp как отправленное не должно разрушать что-либо - вы уверены, что это не проблема, связанная с доступом к неправильной настройке таблиц указателей функций или сбой приложения в функциях NPN, вызываемых из NPP_New? –
Документы для NPP_New говорят, что '' NPP_New' создает новый экземпляр подключаемого модуля. Он вызывается после 'NP_Initialize'. Я не вижу вашего вызова 'NP_Initialize' – woolstar
Мои действия:' LoadLibrary() '-> возвращает действительный дескриптор; 'GetProcAddress()' для "NP_GetEntryPoints" и "NP_Initialize" -> возвращает действительные указатели; 'NP_GetEntryPoints()' -> возвращает 'NPERR_NO_ERROR'; 'NP_Initialize()' -> возвращает 'NPERR_NO_ERROR'; 'NPP_New()' -> сбой «Необработанное исключение» 0x77e615de в «MyApp.exe»: 0xC0000005: нарушение прав доступа. «Если вызов« NPP_New (szMimeType, 0, NP_FULL, 0, 0, 0, NULL) »-> retruns 'NPERR_INVALID_INSTANCE_ERROR', а не сбой; – Slinner