¡¡¡¡ ¸øÈí¼þÒÔÉúÃüÁ¦µÄPlugin
¡¡¡¡ ÖÚËùÖÜÖª£¬ÒªÈÃÒ»¸öÈí¼þ¾ßÓÐÉúÃüÁ¦£¬×îÖØÒªµÄÒ»µãÊÇÒªÈÃËüÌṩ²¢Ö§³ÖÔ½À´Ô½¶àµÄ¹¦ÄÜ£¬¶øÕâÒ»µãµ¥Æ¾¿ª·¢Õß×ÔÉíÊǺÜÄѶÀÁ¢×öµ½µÄ£¬ÐèÒªÈõÚÈý·½µÄÈí¼þ¿ª·¢Õß¿ÉÒÔͨ¹ý×÷ÕßÌṩµÄÒ»ÖÖ;¾¶À´Îª¸ÃÈí¼þÌí¼Ó¹¦ÄÜ¡£
¡¡¡¡ ×î³õ£¬ÈËÃÇÊÇʹÓùØÁªÄ£Ê½£¬Ò²¾ÍÊÇÏñWindowsϵÄÎļþÀ©Õ¹ÃûÒ»Ñù£¬¸ù¾Ý²»Í¬µÄÎļþ¹ØÁª£¬Ê¹Óò»Í¬µÄÈí¼þ´ò¿ªÏàÓ¦µÄÎļþ¡£ÕâÖÖ·½Ê½±àдÀ©Õ¹×îΪÈÝÒ׺Í×ÔÓÉ£¬µ«ÊÇ´æÔÚÒ»¶¨µÄȱÏÝ£¬Ê×ÏÈÊDz»ÄÜÀûÓÃËÞÖ÷Èí¼þµÄ×ÊÔ´£¬Æä´ÎÊÇÈí¼þµÄ½çÃæ·ç¸ñ²»Ò×ͳһ¡¢Áé»îÐÔ²»ºÃ¡£ºóÀ´³öÏÖÁËPlugin½á¹¹£¬Ò²¾ÍÊÇÀûÓö¯Ì¬Á¬½Ó¿âµÄ·½Ê½ÖÆ×÷Plugin£¨ÔÚWindowsƽ̨ÏÂÊÇDLL¡¢ÔÚLinux/Unix»·¾³ÏÂÊÇshare object library£©£¬Plugin³ÌÐòÖ»ÄÜÒÀ¸½ÓÚËÞÖ÷³ÌÐòÔËÐУ¬²»ÄܶÀÁ¢ÔËÐУ¬Ê¹ÓÃPluginµÄÓŵãÊÇϵͳ¿ªÏúС¡¢Ëٶȿ죬ͬËÞÖ÷³ÌÐò½áºÏ½ôÃÜ¡¢Áé»îÐԺá£
¡¡¡¡ ÔÚLinuxÉÏ£¬×îÖøÃûµÄPlugin¼Ü¹¹¾ÍÊÇNetscapeÌá³öµÄPlugin¼Ü¹¹£¬±È½Ï³öÃûµÄ»¹ÓÐWinAmp£¨www.winamp.com£©£¨ÔÚLinux ÉϸÄÃû½ÐXMMS,ÍøַΪwww.xmms.org£©£¬Õâ¸öMP3 ²¥·ÅÈí¼þÖжà²Ê¶à×˵IJå¼þ£¨Plugin£©ÏµÍ³ºÍƤ·ô£¨skin£©ÏµÍ³ÎªÆäһͳÌìÏÂ×ö³öÁ˲»¿ÉÄ¥ÃðµÄ¹±Ïס£ÏÖÔÚWinAmpÒÑ¿ªÊ¼Ìṩһ¸öNSDN£¨Null Soft Develop Network£©À´Èôó¼Ò¿ª·¢Plugin£¬Óɴ˿ɼûPlugin¶ÔÓÚÒ»¸öÈí¼þÀ´ËµÊǶàôÖØÒª¡£
¡¡¡¡ Linuxϲå¼þ°²×°
¡¡¡¡ ÔÚLinuxÉÏ£¬Ê¹ÓÃijÖÖÈí¼þµÄPluginµÄ·½·¨ºÜ¼òµ¥£¬Ò»°ã¸ÃËÞÖ÷Èí¼þ¶¼»áÌṩһЩȱʡµÄPlugin£¬¶øÇÒ»áËÑÑ°ÏàÓ¦µÄPluginĿ¼£¬Óû§¿ÉÒÔ°ÑPlugin°²×°µ½ÏµÍ³µÄPluginĿ¼ÏÂÒ²¿ÉÒÔ°²×°µ½×Ô¼ºµÄĿ¼Ï¡£±ÈÈ磬Ҫ°²×°NetscapeµÄPlugin£¬¿ÉÒÔÉ趨$NPX_PLUGIN_PATHÕâ¸ö»·¾³±äÁ¿µ½ÄãµÄÐÂPluginĿ¼£¬»òÕß°ÑPlugin°²×°µ½ÏÂÁз¾¶ÉÏ£º
¡¡¡¡
ÒýÓÃ:/usr/local/lib/netscape/Plugins
¡¡¡¡ $MOZILLA_HOME/Plugins
¡¡¡¡ $HOME/.netscape/Plugins
¡¡¡¡ Netscape»á×Ô¶¯ËÑÑ°ÕâЩPluginĿ¼À´×Ô¶¯¼ÓÔØÏàÓ¦µÄPlugin£¬ÆäËûµÄÈí¼þÈçGimp¡¢ XMMSºÍNessusµÈµÄʹÓ÷½·¨Óë´Ë´óͬСÒì¡£
¡¡¡¡ ×î¼òµ¥Plugin¼Ü¹¹µÄʵÏÖ
¡¡¡¡ Ê×ÏÈ£¬ÎÒÃÇÒª±àдһ¸öËÞÖ÷³ÌÐò£¬¸ÃËÞÖ÷³ÌÐò±ØÐëΪPluginÌṩÏàÓ¦µÄ½Ó¿Ú£¬ÀýÈçÔÚ±¾Àý×ÓÖеÄAction£¬È»ºóËÞÖ÷³ÌÐò¿ÉÒÔͨ¹ýdlopenÀ´´ò¿ªÏàÓ¦µÄPlugin£¬µ÷ÓÃdlsym ºÍcreateprocÀ´´´½¨PluginµÄ½ø³Ì£¬×îºó»¹Òªµ÷ÓÃPluginÖ´ÐÐÏàÓ¦µÄ¶¯×÷£¬Ò»ÇÐÍê³ÉºóÒªÓÃdlclose À´¹Ø±ÕPlugin¡£ËÞÖ÷³ÌÐòµÄÔ´´úÂëÈçÏ£º
¡¡¡¡
ÒýÓÃ:Plugin£ßmain£®h
¡¡¡¡ #ifndef _PLUG_MAIN_H_
¡¡¡¡ #define _PLUG_MAIN_H_
¡¡¡¡ // ¶¨ÒåÇ¿ÖÆCÀàÐÍÒԻرÜC++ÃüÃû¹æ·¶,ÕâÑùÎÒÃǾͿÉÒÔ¶¨Òådlsym()
¡¡¡¡ #ifdef __cplusplus
¡¡¡¡ extern "C" {
¡¡¡¡ #endif
¡¡¡¡ class CPlugMain
¡¡¡¡ {
¡¡¡¡ public:
¡¡¡¡ virtual int Action() = 0;
¡¡¡¡ };
¡¡¡¡ // ÏÂÃæÊÇPluginµÄͨÓú¯Êý,ÿ¸öPlugin¶¼»áÖØÔØÕâ¸öº¯Êý,Ö÷³ÌÐò½«´´½¨Î©Ò»µÄ×Ó½ø³Ì
¡¡¡¡ extern CPlugMain ?CreatePlug();
¡¡¡¡ typedef CPlugMain ? (?CREATEPLUG_PROC)();
¡¡¡¡ #ifdef __cplusplus
¡¡¡¡ }
¡¡¡¡ #endif //#define cplusplus
¡¡¡¡ #endif //#define _PLUG_MAIN_H_
¡¡¡¡ ????????????????????????????????????????????????????
¡¡¡¡ Plugin£ßmain£®cpp
¡¡¡¡ #include "Plugin_main.h"
¡¡¡¡ #include £¼stdio.h£¾
¡¡¡¡ #include £¼dlfcn.h£¾ //¶¯Ì¬Á´½Ó¿âÏà¹Øº¯Êý
¡¡¡¡ //ÏÂÃ潫¶¨Òå¹Ì¶¨µÄPluginÃû³Æ,¶ÁÕß¿ÉÒÔ×ÔÐж¨ÒåÈçͬWindows×¢²á±íÄÇÑùµÄPlugin×¢²áϵͳ
¡¡¡¡ #define NUM_PLUGINS 2
¡¡¡¡ char ? szPlugins[] =
¡¡¡¡ {
¡¡¡¡ "./Plugin1.so",
¡¡¡¡ "./Plugin2.so"
¡¡¡¡ };
¡¡¡¡ int main( int argc, char ?? argv )
¡¡¡¡ {
¡¡¡¡ CREATEPLUG_PROC createproc[NUM_PLUGINS];
¡¡¡¡ CPlugMain ? pPlugins[NUM_PLUGINS];
¡¡¡¡ void ? handle[NUM_PLUGINS];
¡¡¡¡ char ? error;
¡¡¡¡ int i;
¡¡¡¡ // ¼ÓÔØËùÓÐPlugin
¡¡¡¡ for ( i=0; i£¼NUM_PLUGINS; i++ )
¡¡¡¡ {
¡¡¡¡ printf( "¼ÓÔØPlugin %s.\n", szPlugins[i] );
¡¡¡¡ // ¼ÓÔØPlugin¶¯Ì¬Á´½Ó¿â
¡¡¡¡ if (NULL == (handle[i] = dlopen( szPlugins[i], RTLD_LAZY )))
¡¡¡¡ {
¡¡¡¡ handle[i] = NULL;
¡¡¡¡ printf( "dlopen error (%s)\n", szPlugins[i] );
¡¡¡¡ }
¡¡¡¡ else
¡¡¡¡ {
¡¡¡¡ // È¡µÃCreatePlugµÄµØÖ·
¡¡¡¡ createproc[i] = (CREATEPLUG_PROC)dlsym( handle[i], "CreatePlug" );
¡¡¡¡ if ((error = dlerror()) != NULL)
¡¡¡¡ {
¡¡¡¡ dlclose( handle[i] );
¡¡¡¡ handle[i] = NULL;
¡¡¡¡ printf( "dlsym error (%s)\n", szPlugins[i] );
¡¡¡¡ }
¡¡¡¡ else
¡¡¡¡ {
¡¡¡¡ // ´´½¨Plugin½ø³Ì
¡¡¡¡ pPlugins[i] = createproc[i]();
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ // Ö´ÐÐPluginµÄ¶¯×÷
¡¡¡¡ printf( "ÕýÔÚÔËÐÐPlugin ..\n" );
¡¡¡¡ for ( i=0; i£¼NUM_PLUGINS; i++ )
¡¡¡¡ {
¡¡¡¡ if (handle[i] != NULL)
¡¡¡¡ {
¡¡¡¡ pPlugins[i]-£¾Action();
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ // ¹Ø±ÕPlugin
¡¡¡¡ for ( i=0; i£¼NUM_PLUGINS; i++ )
¡¡¡¡ {
¡¡¡¡ if (handle[i] != NULL)
¡¡¡¡ {
¡¡¡¡ dlclose( handle[i] );
¡¡¡¡ handle[i] = NULL;
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ return 0;
¡¡¡¡ }
¡¡¡¡ ????????????????????????????????????????????????????
¡¡¡¡ ÏÂÃæÊÇÒ»¸ö×î¼òµ¥µÄPlugin£¬Ö»°üº¬ÁËPlugin_main.h Õâ¸öÍ·Îļþ£¬²¢ÇÒʵÏÖActionºÍCreatePlugÕâÁ½¸öº¯Êý¡£Ô´³ÌÐòÈçÏ£º
¡¡¡¡
ÒýÓÃ:Plugin£ß1£®h
¡¡¡¡ ££ifndef £ßPLUGIN£ß1£ßH£ß
¡¡¡¡ ££define £ßPLUGIN£ß1£ßH£ß
¡¡¡¡ ££include ¡åPlugin£ßmain£®h¡å
¡¡¡¡ class CPlugin1 ? public CPlugMain
¡¡¡¡ ?
¡¡¡¡ public?
¡¡¡¡ virtual int Action???
¡¡¡¡ ??
¡¡¡¡ ££endif £¯£¯£££ä£å£æ£é£î£å £ßPLUGIN£ß1£ßH£ß
¡¡¡¡ Plugin£ß1£®cpp
¡¡¡¡ ££include ¡åPlugin£ßmain£®h¡å
¡¡¡¡ ££include ¡åPlugin1£®h¡å
¡¡¡¡ ££include £¼stdio£®h£¾
¡¡¡¡ int CPlugin1??Action??
¡¡¡¡ ?
¡¡¡¡ printf( "ÕâÊÇPlugin 1,ÔËÐÐÕý³£\n" );
¡¡¡¡ return 0;
¡¡¡¡ }
¡¡¡¡ CPlugMain ? CreatePlug()
¡¡¡¡ {
¡¡¡¡ return new CPlugin1;
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ ????????????????????????????????????????????????????
¡¡¡¡ ÖµµÃ×¢ÒâµÄÊÇ£¬±àÒëÕâ¸öPluginµÄʱºòҪʹÓà -shared²ÎÊýÀ´²úÉú¶¯Ì¬Á´½Ó¿â.soÎļþ£¬ÀýÈ磺gcc -o Plugin1.so Plugin1.o -shared¡£
¡¡¡¡ Plugin¿ª·¢ÊµÕ½
¡¡¡¡ ÎÒÃÇÀ´¿´¿´ÈçºÎΪÏÖÓеÄһЩÈí¼þ±àдPlugin£¬ÆäÖÐ×ÔÓµÄÊÇNetscape 4.x ºÍMozilla £¨Netscape 6.x£©µÄPlugin±àд¹¤×÷£¬¶øXmms/Gimp/NessusµÄPluginÏà¶ÔÀ´ËµÒªÈÝÒ×±àдµÃ¶à¡£
¡¡¡¡ 1£® Netscape 4£®x / Mozilla µÄPlugin½á¹¹
¡¡¡¡ NetscapeµÄPlugin½á¹¹Ïà¶Ô±È½Ï¹ÅÀÏ£¬NetscapeÌṩµÄ½Ó¿Ú°üÀ¨NPP ϵÁкÍNPN ϵÁУ¬ÆäÖÐNPP ϵÁÐÖÐPlugin±ØÐë×ÔÐÐʵÏÖ£¬°üÀ¨£ºNPP_Destroy¡¢NPP_DestroyStream¡¢
¡¡¡¡ NPP_GetJavaClass¡¢NPP_HandleEvent¡¢NPP_Initialize¡¢NPP_New¡¢NPP_NewStream¡¢NPP_Print¡¢NPP_SetWindow¡¢NPP_Shutdown¡¢NPP_StreamAsFile¡¢NPP_URLNotify¡¢NPP_WriteºÍNPP_WriteReady¡£
¡¡¡¡ NPN ϵÁÐÊÇPluginÒªÇóNetscapeÌṩµÄһЩº¯Êý£¬°üÀ¨£ºNPN_DestroyStream¡¢
¡¡¡¡ NPN_GetJavaEnv¡¢NPN_GetJavaPeer¡¢NPN_GetURL¡¢
¡¡¡¡ NPN_MemAlloc¡¢NPN_MemFlush¡¢NPN_MemFree¡¢
¡¡¡¡ NPN_NewStream¡¢NPN_PostURL¡¢NPN_RequestRead¡¢
¡¡¡¡ NPN_Status¡¢NPN_UserAgent¡¢NPN_VersionºÍNPN_Write¡£
¡¡¡¡ ÿÖÖPlugin¶¼ÓÐÁ½ÖÖ¹¤×÷ģʽ£¬¼´Ç¶ÈëʽºÍÈ«Ò³Ã淽ʽ£¬PluginÐèҪʵÏֵŤ×÷°üÀ¨ÒÔÏÂÄÚÈÝ£º
¡¡¡¡ £¨1£©µÇ¼ÇÒ»ÖÖ»ò¼¸ÖÖPluginÒª²Ù×÷µÄMIME¸ñʽ£»
¡¡¡¡ £¨2£©ÔÚä¯ÀÀÆ÷µÄ´°¿ÚÖмä»æͼ£»
¡¡¡¡ £¨3£©½ÓÊÕÊó±ê/¼üÅÌÊäÈ룻
¡¡¡¡ £¨4£©´ÓÏàÓ¦µÄURLÖÐÏÂÔØ/·¢ËÍÊý¾Ý¡£
¡¡¡¡ Óû§Èç¹ûÒª¿ª·¢NetscapeµÄPlugin£¬Ê×ÏÈÒªÔÚftp://ftp.netscape.com/pub/sdk/Plugin/unix
¡¡¡¡ ÏÂÔØÏàÓ¦µÄSDK Îļþ£¬ÀïÃæÓмòµ¥µÄÀý×Ó£¬Óû§¿ÉÒÔ×ÔÐÐÐ޸ijÉ×Ô¼ºµÄPlugin¡£
¡¡¡¡ Mozilla/Netscape 6.xµÄPlugin¼Ü¹¹ÊÇÄ¿Ç°×îÏȽøµÄÒ»ÖÖ£¬ËüÖ÷ÒªÓÐÏÂÁÐÓŵ㣺
¡¡¡¡ £¨1£©Ìṩ»ùÓÚC++µÄAPIº¯Êý£»
¡¡¡¡ £¨2£©ÌṩÁËXPCOM£¬ËüÊÇCOM £¨the Component Object Model£©µÄÒ»¸ö×Ó¼¯£¬XPµÄÒâ˼ÊÇcross-platform£¨¿çƽ̨£©£¬ÕâʹµÃеÄPluginµÄ¿çƽ̨ÐԺͲ»Í¬°æ±¾µÄ¼æÈÝÐԵõ½Á˼«´óµÄÌá¸ß£»
¡¡¡¡ £¨3£©ÍêÈ«Ïòºó¼æÈÝ£¬ËùÓÐÀϵÄ4.x ϵÁеÄNetscape Plugin ¶¼¿ÉÒÔ¼ÌÐøʹÓá£
¡¡¡¡ Mozilla µÄPlugin¼Ü¹¹½«ÔÀ´µÄNPP ϵÁнӿڸıäΪ£ºNPIPlugin¡¢ NPIPluginInstanceºÍNPIPluginStream Èý¸öÀࣻNPN ϵÁнӿڱ»À©³äΪNPIPluginManager¡¢NPIPluginManagerStream¡¢NPIPluginInstancePeerºÍNPIPluginStreamPeer
¡¡¡¡ ËĸöÀ࣬ÆäÖÐNPµÄÒâ˼ÊÇNetscape Plugin£¬ IµÄÒâ˼ÊÇInterface¡£
linux²å¼þ¿ª·¢²Î¿¼ÎÄÏ× xmms²å¼þ¿ª·¢Ö¸ÄÏ£º http://www.xmms.org
gimp²å¼þ¿ª·¢Ö¸ÄÏ£º http://www.gimp.org/plugin_devel.html
nessus²å¼þ¿ª·¢Ö¸ÄÏ£º http://www.nessus.org/doc/plugins_api.txt
http://www.nessus.org/doc/nasl.html
netscape 4£®x ϵÁвå¼þ¿ª·¢Ö¸ÄÏ£º
http://developer.netscape.com/docs/manuals/
communicator/plugin/index.htm
ftp://ftp.netscape.com/pub/sdk/plugin/unix
mozilla ?netscape 6£®x?ϵÁвå¼þ¿ª·¢Ö¸ÄÏ£º ¡¡
http://www.doczilla.com/development/extmoz.html
http://www.mozilla.org/docs/plugin.html
http://www.mozilla.org/docs/extendmoz.html
¡¡¡¡ Òª¿ª·¢Mozilla µÄPlugin£¬Óû§ÐèÒªÏÂÔØMozilla µÄÔ´´úÂ룬¶øPluginµÄÀý×Ó³ÌÐò¿ÉÒÔÔÚhttp://lxr.mozilla.org/mozilla/source/
¡¡¡¡ Plugin/ ÉϲéÔÄ£¬¾ßÌåÎĵµÇë²ÎÔĸ½Â¼¡£
¡¡¡¡ 2£® XmmsµÄPlugin¼Ü¹¹
¡¡¡¡ XmmsµÄPlugin·ÖΪÊäÈ루Input £©¡¢Êä³ö£¨Output£©¡¢¿ÉÊÓ»¯£¨Visualization£©¡¢Í¨Óã¨General£©¡¢Ð§¹û£¨Effect£©ºÍÆäËû£¨Misc£©ÎåÖÖ£¬Òª¿ª·¢XmmsµÄPluginÐèÒª°²×°xmms-develÕâ¸öÈí¼þ°ü£¬ÏÂÃæÊÇÒ»¸ö×î¼òµ¥µÄXmms¿ÉÊÓ»¯µÄPlugin£º
¡¡¡¡
ÒýÓÃ:xmms£Plugin£®c
¡¡¡¡ #include £¼gtk/gtk.h£¾
¡¡¡¡ #include "xmms/Plugin.h"
¡¡¡¡ static GtkWidget ?window = NULL,?button;
¡¡¡¡ static void Plugin_init(void);
¡¡¡¡ static void Plugin_cleanup(void);
¡¡¡¡ VisPlugin Plugin_vp =
¡¡¡¡ {
¡¡¡¡ NULL,
¡¡¡¡ NULL,
¡¡¡¡ 0,
¡¡¡¡ NULL, /? ÃèÊöº¯Êý ?/
¡¡¡¡ 0,
¡¡¡¡ 1,
¡¡¡¡ Plugin_init, /? ³õʼ»¯º¯Êý ?/
¡¡¡¡ Plugin_cleanup, /? ½áÊøº¯Êý ?/
¡¡¡¡ NULL, /? ¹ØÓÚº¯Êý ?/
¡¡¡¡ NULL, /? ÅäÖú¯Êý ?/
¡¡¡¡ NULL, /? disable_Plugin ?/
¡¡¡¡ NULL, /? playback_start ?/
¡¡¡¡ NULL, /? playback_stop ?/
¡¡¡¡ NULL, /? render_pcm ?/
¡¡¡¡ NULL /? render_freq ?/
¡¡¡¡ };
¡¡¡¡ VisPlugin ?get_vPlugin_info(void)
¡¡¡¡ {
¡¡¡¡ Plugin_vp.description =
¡¡¡¡ g_strdup_printf("Hello World!");
¡¡¡¡ return &&Plugin_vp;
¡¡¡¡ }
¡¡¡¡ #define WIDTH 250
¡¡¡¡ #define HEIGHT 100
¡¡¡¡ static void Plugin_destroy_cb(GtkWidget ?w,gpointer data)
¡¡¡¡ {
¡¡¡¡ Plugin_vp.disable_Plugin(&&Plugin_vp);
¡¡¡¡ }
¡¡¡¡ static void Plugin_init(void)
¡¡¡¡ {
¡¡¡¡ if(window)
¡¡¡¡ return;
¡¡¡¡ window = gtk_window_new(GTK_WINDOW_DIALOG);
¡¡¡¡ gtk_window_set_title(GTK_WINDOW(window),"Hello World");
¡¡¡¡ gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
¡¡¡¡ gtk_widget_realize(window);
¡¡¡¡ gtk_widget_set_usize(window, WIDTH, HEIGHT);
¡¡¡¡ button = gtk_button_new_with_label ("Hello World");
¡¡¡¡ gtk_container_add (GTK_CONTAINER (window), button);
¡¡¡¡ gtk_widget_show(button);
¡¡¡¡ gtk_widget_show(window);
¡¡¡¡ }
¡¡¡¡ static void Plugin_cleanup(void)
¡¡¡¡ ?
¡¡¡¡ if (window)
¡¡¡¡ {
¡¡¡¡ gtk£ßwidget£ßdestroy?window??
¡¡¡¡ }
¡¡¡¡ }
¡¡¡¡ 3£® GimpµÄPlugin¼Ü¹¹
¡¡¡¡ GimpµÄPlugin½á¹¹±È½ÏÌØÊ⣬ʹÓÃÁ˺궨ÒåÀ´ÊµÏÖPlugin½Ó¿Ú¡£
¡¡¡¡ MAIN()ºêµ÷ÓÃgimp_main¡¢Ê¹µÃPlugin¿ÉÒÔ±»Gimpµ÷Ó㬠Gimp µÄPlugin½Ó¿Ú±È½Ï¼òµ¥£¬ÔÚgimpÆô¶¯Ê±½«²éѯËùÓеÄPlugin²¢×¢²áµ½Ò»¸öPDB £¨procedural database£©ÖУ¬Ã¿¸öPluginÖ»ÐèҪʵÏÖÏÂÃæµÄ½á¹¹£º
¡¡¡¡
ÒýÓÃ:????????????????????????????????????????????????typedef void (? GimpInitProc) (void);
¡¡¡¡ typedef void (? GimpQuitProc) (void);
¡¡¡¡ typedef void (? GimpQueryProc) (void);
¡¡¡¡ typedef void (? GimpRunProc) (gchar ?name,
¡¡¡¡ gint nparams,
¡¡¡¡ GimpParam ?param,
¡¡¡¡ gint ?nreturn_vals,
¡¡¡¡ GimpParam ??return_vals);
¡¡¡¡ struct _GimpPluginInfo
¡¡¡¡ {
¡¡¡¡ /? Plugin³õʼ»¯º¯Êý ?/
¡¡¡¡ GimpInitProc init_proc;
¡¡¡¡ /? PluginÍƳöº¯Êý ?/
¡¡¡¡ GimpQuitProc quit_proc;
¡¡¡¡ /? ¸æÖªËÞÖ÷³ÌÐò±¾PluginµÄ¹¦ÄÜ,Ö´ÐÐ×¢²áµ½PDBµÄ¹¦ÄÜ ?/
¡¡¡¡ GimpQueryProc query_proc;
¡¡¡¡ /? ʵÏÖPluginµÄ¹¦ÄÜ ?/
¡¡¡¡ GimpRunProc run_proc;
¡¡¡¡ };
¡¡¡¡ GimpµÄPlugin¾ÍÊÇͨ¹ýÉÏÃæµÄËĸöº¯ÊýÀ´ÊµÏֵġ£
¡¡¡¡ ¹ØÓÚLinux ÏÂÃæµÄPluginµÄʹÓúͱà³Ì¾Í½éÉܵ½ÕâÀÆäÖÐNetscape/MozillaµÄPlugin±à³Ì×îΪ¸´ÔÓ£¬²»¹ý¶ÔÓÐÒ»¶¨±à³Ì¾ÑéµÄÓû§À´Ëµ£¬ºÃºÃÑо¿Ò»Ï MozillaµÄPlugin±à³ÌÊÇ»áºÜÓкô¦µÄ¡£
¡¡¡¡ ±¾ÎĵÄËùÓÐÀý×Ó³ÌÐò¶¼ÔÚLinux-Plugin-Example.zipÖУ¬Óû§¿ÉÒÔµ½http://opencjk.org/Linux-Plugin- Example.zipÍøÖ·×ÔÐÐÏÂÔØ¡£ ËùÓгÌÐò¾ùÔÚRedHat 7.0¡¢gcc-2.96¡¢ glibc-2.1.92 ϱàÒëͨ¹ý¡£