調用插件命令時是否需要加 /NOUNLOAD

http://blog.csdn.net/nsisex/article/details/14452855

上次說過本來想寫教程的,後來放棄了,只寫了一部分

這次再摘抄一部份掃一下盲:


      對於大部份人來說,可能都只會按插件提供的例子去做,能編譯得過能正常運行就算了,但你想過沒有,爲什麼有些插件需要/NOUNLOAD才能正常運行,而有些插件卻從來不用也能正常運行?

      首先,/NOUNLOAD是NSIS遺留下來的歷史問題,是爲了兼容舊版本的插件而保留下來的,在NSIS2.42之前,如果想插件在調用之後不被FreeLibrary,必須使用/NOUNLOAD參數 或SetPluginUnload alwaysoff,但這有個不便之處是必須以後不加/NOUNLOAD參數再調用一次該插件,否則會造成安裝程序在退出時無法刪除該dll。

      從NSIS2.42開始,只要新編寫的插件調用它新提供的接口,就可以自動在安裝程序退出時才被FreeLibrary,因此調用插件命令時無需使用/NOUNLOAD參數。

     其次,對於舊版本的插件不用 /NOUNLOAD參數也能正常運行的原因在於它被FreeLibrary後沒有造成任何影響,但對於一個界面類的插件,肯定要保持插件不被FreeLibrary的,因爲它需要將窗口的回調函數修改成自己內部的函數,如果它被FreeLibrary了,後果可想而知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章