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。

2011-07-13 wince上面plg插件生成_第1张图片

然后创建成功

在设置工程属性时:

2011-07-13 wince上面plg插件生成_第2张图片

填写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()来实现。

 

你可能感兴趣的:(2011-07-13 wince上面plg插件生成)