日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

NPAPI开发详解,Windows版

發布時間:2025/3/20 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NPAPI开发详解,Windows版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:http://mozilla.com.cn/post/21666/

本文通過多圖組合,詳細引導初學者開發NPAPI的瀏覽器插件。

如需測試開發完成的插件請參考http://mozilla.com.cn/kb/dev/A.88/

1.?準備工作

開發工具

本例使用的是visual?studio?2008?英文版,下圖是關于信息

Windows?SDK

本例使用Windows7操作系統?這里下載SDK

NPAPISDK

本例使用的是Firefox4.0.1提供的SDK。

首先,從這里下載mozilla源碼。然后,解壓firefox-4.0.1.source.tar.bz2文件。

將?\firefox-4.0.1.source\mozilla-2.0\modules\plugin?目錄解壓縮出來,里面有我們開發NPAPI插件所需的所有資源。

為了方便大家使用,--這里--提供plugin.rar的下載。

本例將plugin目標解壓到D:\code\下(后面統一使用絕對路徑,以避免異意)

2.?創建Plugin

本著“有圖有真相”的原則,下面將連續多圖并配文字一步步創建、調試Plugin。圖中畫紅圈的代表需要填寫或者需要選擇的地方。

創建項目

新建項目??

 

Name項一定要以np開頭,為了將來適應不同操作系統,最好全小寫,不要太長,盡量控制在8字符內。
??本例定義為npdemo
??Location
項定義到plugin\sdk\samples以便項目屬性中用相對路徑引用NPAPI的SDK
??本例定義為d:\code\plugin\sdk\samples
??

 

向導
??

 

選擇Application?typeDLL
??選擇Empty?project
??

 

添加文件

首先,添加NPAPI?SDK中的Common文件
??

 

一共3個文件
??

 

然后,添加def文件
??

 

命名最好與項目一致
??

 

編輯npdemo.def為

1 2 3 4 5 6 LIBRARY?"npdemo" ????? EXPORTS ????NP_GetEntryPoints?? @1 ????NP_Initialize?????? @2 ????NP_Shutdown???????? @3

 

現在,添加資源??

 

選擇Version??

 

自動生成了resource.hnpdemo.rc。由于要在版本信息中加項,所以手工npdemo.rc??

 

選擇“Y”??

 

在圖中的BLOCK中添加。注意!BLOCK?一定要是"040904e4"???VALUE?"MIMEType",?"application/demo-plugin"??這里順便說一下,MIMEType是plugin的唯一標示,需要自己定義??通常的格式是"application/“+?[plugin?name]??本例中定義為"application/demo-plugin"??

 

下圖是rc文件數據項與plugin數據項(about:plugins?中)的對應關系???

 

下面添加最關鍵的部分:Plugin實現類????

 

類名可以隨便起,本例命名為CPlugin??但是一定要繼承自nsPluginInstanceBace??

 

修改Plugin.h

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #pragma once #include "pluginbase.h" ????? class?CPlugin :?public?nsPluginInstanceBase { private: ??NPP m_pNPInstance; ??NPBool m_bInitialized; public: ??CPlugin(NPP pNPInstance); ??~CPlugin(); ????? ??NPBool init(NPWindow* pNPWindow)? {? m_bInitialized = TRUE;??returnTRUE;} ??void?shut()? {? m_bInitialized = FALSE;? } ??NPBool isInitialized()? {??return?m_bInitialized;? } };

 

修改Plugin.cpp
??其中實現了4個全局函數

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include "plugin.h" ????? ????? // functions / NPError NS_PluginInitialize() { ??return?NPERR_NO_ERROR; } ????? void?NS_PluginShutdown() { } ????? nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) { ??if(!aCreateDataStruct) ????return?NULL; ????? ??CPlugin * plugin =?new?CPlugin(aCreateDataStruct->instance); ??return?plugin; } ????? void?NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin) { ??if(aPlugin) ????delete?(CPlugin *)aPlugin; } // CPlugin / CPlugin::CPlugin(NPP pNPInstance) : nsPluginInstanceBase(), ??m_pNPInstance(pNPInstance), ??m_bInitialized(FALSE) { } ????? CPlugin::~CPlugin() { }

修改項目屬性

 

打開項目屬性??

 

修改字符集設置為“Use?Multi-Byte?Character?Set
??

 

添加搜索目錄?“....\include”和“........\base\public
??

 

添加預編譯宏?X86
??

現在可以編譯了!


3、注冊、測試

本例編譯后,在D:\code\plugin\sdk\samples\npdemo\Debug生成npdemo.dll

打開注冊表,在HKEY_CURRENT_USER\SOFTWARE\MozillaPlugins下新建子項@mozilla.com.cn/demo
??并新建字符串數據“Path”設值為D:\code\plugin\sdk\samples\npdemo\Debug\npdemo.dll

 

打開火狐瀏覽器??在地址欄輸入“about:plugins”??如果在plugin列表中有本例的npdemo.dll及說明我們的plugin示例已經成功完成
???


簡單的測試頁面: 

1 2 3 4 5 6 7 <HTML> ????<HEAD> ????</HEAD> ????<BODY> ????????<embed?type="application/demo-plugin"> ????</BODY> </HTML>

特別注意

如果在實際部署中使用安裝文件安裝plugin,并用注冊表的方式注冊。那么就不需要重啟火狐,只要在頁面中執行?navigator.plugins.refresh(false);??????然后刷新頁面即可使用剛安裝的plugin

25條評論?? 2011-07-11 10:57

總結

以上是生活随笔為你收集整理的NPAPI开发详解,Windows版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。