1
我已經完成了我的NPAPI插件,它在谷歌瀏覽器中效果很好,但是有一個奇怪的問題。問題是我在插件中編寫了一個方法,該方法向瀏覽器返回一個字符串。爲此,您必須在瀏覽器中分配內存並將結果字符串複製到該內存中。例如:NPN_MemFree NPN_MemFree將返回的數據鎖定到谷歌瀏覽器
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。當我從谷歌Chrome瀏覽器調用這個方法兩次時就會出現問題。它第一次很好。從第二次等等,它返回在瀏覽器中顯示'X'的垃圾值。我已經在Firefox中測試過相同的插件,並且它工作正常並且無論我調用該方法多少次都會返回正確的值。但是當我關閉加載插件的頁面時,Firefox就會崩潰。
任何指針發生在這種奇怪的情況是讚賞。我正在處理這個問題,一旦我得到任何有用的信息,就會更新線程。
這絕對是問題所在。欲瞭解更多信息,請閱讀NPAPI中的內存管理:http://colonelpanic.net/2009/12/memory-management-in-npapi/ – taxilian 2010-10-26 15:26:35