Я закончил свой плагин NPAPI, и он отлично работает в Google Chrome, но возникла странная проблема. Проблема в том, что я написал в плагине метод, который возвращает строку в браузер. Для этого вам нужно выделить память в браузере и скопировать в нее полученную строку. Что-то типа:
bool
ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,
uint32_t argCount, NPVariant *result)
{
if (name == sMethod_id) {
...
//free the memory if it is already allocated
if (m_pPtr) NPN_MemFree(m_pPtr);
//allocate the string in the browser memory
m_pPtr = (char*)NPN_MemAlloc(size+1);
SecureZeroMemory(m_pPtr, size+1);
memcpy(m_pATR, string, size);
//send result to browser
STRINGZ_TO_NPVARIANT(m_pPtr, *result);
return true;
}
...
}
Обратите внимание, что 'm_pPtr' является членом данных класса и инициализируется значением NULL при построении. Проблема возникает, когда я дважды вызываю этот метод из Google Chrome. Первое время работает отлично. Со второго раза и так далее он возвращает значение мусора, отображаемое «X» в браузере. Я протестировал тот же плагин в Firefox, и он отлично работает и возвращает правильное значение независимо от того, сколько раз я вызываю метод. Но когда я закрываю страницу, на которой загружен плагин, Firefox падает.
Приветствуются любые указания на то, что происходит в этой странной ситуации. Я работаю над этим и обновлю ветку, как только получу любую полезную информацию.