2011-07-13 wince上面plg插件生成

工具:  D:\Tools\GUIDGEN.EXE  這是安裝vs6.0時的一個工具,只要生成的一個獨一無二的ID號。

生成ID後,用作plg的ID字串,如:#define XML_PLG_ID  _T("66D1345F-8341-41eb-A09E-A1C7A82E4C2D")

對外通常有一個interface的頭文件,以if.h 結尾,裏面是一個結構體,成員都是函數指針。如:

typedef HANDLE (*pLoad)    (LPCTSTR lpFileName);
。。。

typedef struct _tag_XML_FUN
{
 pLoad    Load;

。。。

}XML_FUN;

而在 .c文件裏面,提供以下函數:

//先完成你想做的事

HANDLE Load(LPCTSTR lpFileName)
{
 CMarkup* mark = new CMarkup;

 mark->Load(lpFileName);
 return (HANDLE)mark;
}

//生成此結構體的一個全局變量

XML_FUN g_XmlFun; extern "C"
{

void* GetInterface()//對外的函數
{

//將你的函數的入口賦給結構體的成員
 g_XmlFun.Load    =Load    ;

。。。

//將結構體的地址返回

return (void*)&g_XmlFun;
}

};

這樣,GetInterface()會將結構體的地址返回調用者。

那麼如何將其生成plg文件呢?

在創建工程時,在application settings時候,application type 選擇DLL。

然後創建成功

在設置工程屬性時:

填寫output文件爲plg:

當執行Built時候,就可以在指定的路徑生成plg文件了。

那麼怎樣使用呢?

這還用到另外一個封好的插件,但可以進到裏面看其實現方式。

先在應用程序裏面調用下面的函數,將最開始的插件導入:

#define PLUGIN_VECTOR_NAME _T("PlgVector.plg") //劉工做的插件

static Plugin_Man_Fun* LoadPluginCenter()
{
 TCHAR szPath[MAX_PATH] = _T("");
 GetAbsPathName(PLUGIN_VECTOR_NAME, szPath);
 HMODULE hMod = LoadLibrary(szPath);
 if(hMod == NULL)
 {
 // MessageBox(szPath);
  return NULL;
 }
 pGetPluginMan pFun = (pGetPluginMan)GetProcAddress(hMod, _T("GetPluginMan"));
 return pFun();
}

這個插件只是用vector<PluginMan> _plgs 此向量來做一個插件管理,管理插件的查找,加入,刪除等等。庫的導入是用

上面的LoadLibrary(szPath)和 GetProcAddress()來實現。

 

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