當前位置:編程學習大全網 - 編程語言 - 如何使用C++開發WPS Office插件

如何使用C++開發WPS Office插件

WPS Office的插件由壹個實現了特定接口的DLL、壹個XML配置文件以及插件本身需要的其他文件組成。WPS Office 插件DLL實際上是壹個實現了_IDTExtensibility2接口的COM組件。

1._IDTExtensibility2

插件DLL要導出COM要求的DllCanUnloadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer四個函數,並實現_IDTExtensibility2接口。_IDTExtensibility2接口的定義在Kingsoft Add-In Designer類型庫中,導入ksaddndr.dll就可以使用這個接口。

#import "C:\Program Files\Kingsoft\WPS Office Personal\office6\ksaddndr.dll" named_guids, raw_interfaces_only

interface_IDTExtensibility2: IDispatch

{

virtual HRESULT __stdcallOnConnection(

/*[in]*/ IDispatch * Application,

/*[in]*/ enum ext_ConnectMode ConnectMode,

/*[in]*/ IDispatch * AddInInst,

/*[in]*/ SAFEARRAY * * custom

) = 0;

virtual HRESULT __stdcallOnDisconnection(

/*[in]*/ enum ext_DisconnectMode RemoveMode,

/*[in]*/ SAFEARRAY * * custom

) = 0;

virtual HRESULT __stdcallOnAddInsUpdate(

/*[in]*/ SAFEARRAY * * custom

) = 0;

virtual HRESULT __stdcallOnStartupComplete(

/*[in]*/ SAFEARRAY * * custom

) = 0;

virtual HRESULT __stdcallOnBeginShutdown(

/*[in]*/ SAFEARRAY * * custom

) = 0;

};

插件安裝時,WPS Office會將插件DLL註冊(DllRegisterServer)到系統中。WPS Office啟動時,將通過插件平臺(管理插件的模塊)加載插件。插件平臺通過COM方式創建壹個_IDTExtensibility2對象,然後調用_IDTExtensibility2.OnConnection。插件可以在OnConnection中做壹些初始化操作,如添加菜單項、工具欄按鈕等。OnConnection之後,OnStartupComplete將被調用,至此插件加載完成。WPS關閉時,插件平臺先後調用OnBeginShutdown和OnDisconnection。目前,WPS Office插件平臺不會調用插件的_IDTExtensibility2.OnAddInsUpdate方法。插件實現壹個空的OnAddInsUpdate就可以了,即直接返回S_OK,應避免在其中編寫其他代碼,以免將來引起兼容問題。

1.1._IDTExtensibility2.OnConnection

virtual HRESULT __stdcallOnConnection(

/*[in]*/ IDispatch *Application,

/*[in]*/ enumext_ConnectModeConnectMode,

/*[in]*/ IDispatch * AddInInst,

/*[in]*/ SAFEARRAY * * custom);

OnConnection方法壹***帶有4個參數。第壹個參數Application是宿主程序對象;第二個參數是ext_ConnectMode類型的枚舉值;第三個和第四個參數目前沒有使用,插件實現OnConnection時必須忽略這兩個參數。

ext_ConnectMode定義了4個常量值,如下所示。

enumext_ConnectMode

{

ext_cm_AfterStartup = 0,

ext_cm_Startup = 1,

ext_cm_External = 2,

ext_cm_CommandLine = 3

};

其中,ext_cm_Startup和ext_cm_AfterStartup是插件平臺加載COM插件時傳入OnConnection的。ext_cm_External和ext_cm_CommandLine目前沒有用到。

a.ext_cm_Startup

WPS啟動時,插件平臺會立即加載COM插件,調用OnConnection(Application, ext_cm_Startup)。

b.ext_cm_AfterStartup

用於安裝插件過程。安裝插件時,WPS Office插件平臺會加載插件,並調用OnConnection(Application, ext_cm_AfterStartup),此時插件要做兩件事情,即安裝後的初始化以及加載初始化。如果插件安裝以後不需要進壹步的配置等初始化工作,那麽對這個插件而言,不需要區分ext_cm_AfterStartup和ext_cm_Startup。

壹般情況下,插件會在OnConnection中添加菜單項或者工具欄按鈕等功能入口。在WPS Office添加的菜單項或者工具欄按鈕,分為“臨時”和“持久”兩種類型。顧名思義,帶有“臨時”屬性的菜單項或工具欄按鈕,在WPS Office重新啟動以後就不存在了;帶有“持久”屬性的菜單項或工具欄按鈕,在WPS Office重新啟動以後,仍然存在。

插件添加菜單項和工具欄按鈕時,推薦使用“臨時”的菜單項和工具欄按鈕,在宿主程序關閉時,插件也不要調用API刪除菜單或工具欄按鈕。插件添加菜單項或工具欄按鈕時,建議先檢查這些菜單或按鈕是否已經存在,以免重復添加。

1.2._IDTExtensibility2.OnStartupComplete

插件平臺加載插件過程中,會先後調用OnConnection和OnStartupComplete。如果插件需要在插件啟動以後(OnConnection執行完之後)做壹些事情,可以將這些工作放到OnStartupComplete中執行。大多數情況下,插件可以實現壹個空的OnStartupComplete,返回S_OK即可。

1.3._IDTExtensibility2.OnBeginShutdown

WPS Office關閉過程中,插件平臺會調用OnBeginShutdown,通知插件做清理工作,如保存配置、終止未完成的工作、釋放系統資源等。OnBeginShutdown在OnDisconnection之前被調用。

1.4._IDTExtensibility2.OnDisconnection

OnDisconnection和OnConnection相對應,插件在OnConnection中添加菜單或工具欄命令、註冊事件通知,OnDisconnection則註銷事件通知。

virtual HRESULT __stdcallOnDisconnection(

/*[in]*/ enumext_DisconnectModeRemoveMode,

/*[in]*/ SAFEARRAY * * custom) ;

  • 上一篇:地雷怎麽做
  • 下一篇:jsp做壹個最簡單的,連接數據庫,實現增刪改查人員姓名的功能。壹定要非常簡單的那種。
  • copyright 2024編程學習大全網