青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Codejie's C++ Space

Using C++

LingosHook:Plugins


    LingosHook最近的版本發(fā)布有五個(gè)多月了,下載量也超過(guò)2500了~看來(lái)Lingoes真的很流行,單詞本真的很需要啊。。。

    從目前得到的反饋情況看,有一半多的都是增強(qiáng)功能。如果把這些功能一一加到LingosHook中,總感覺(jué)會(huì)使其變得臃腫,甚至可能就偏離了作為單詞本的主線了。但有些功能確實(shí)可以很有用的,比如單詞的導(dǎo)出,等等。
    既要添加功能,又不能影響原有的框架,想來(lái)想去,總沒(méi)有個(gè)好的方案。幾天前LP收拾書柜時(shí)忽然問(wèn)我--“Delphi你還會(huì)嗎?”接過(guò)兩本厚厚的《Delphi5 開發(fā)指南》,突然就想起十年前曾用Delphi開發(fā)的CBE(Cell Broadcast Equipment,不知道是否有人記得這個(gè)。。)程序來(lái),那其中用到的‘Plugins’方法應(yīng)該可以解決這個(gè)問(wèn)題。
    這個(gè)‘Plugins’--看著和說(shuō)著都很好聽,當(dāng)然了,當(dāng)時(shí)確實(shí)也很得意。實(shí)際說(shuō)起來(lái)原理很簡(jiǎn)單,就是動(dòng)態(tài)加載DLL,利用DLL封裝所需功能。不過(guò)現(xiàn)在想想,那時(shí)自己還真的很有想象力啊,因?yàn)楫?dāng)時(shí)只是聽說(shuō)過(guò)‘Plugins’技術(shù),從來(lái)不知道該怎么做,總覺(jué)得應(yīng)該是個(gè)非常非常高深的技術(shù),都沒(méi)敢去研究過(guò)。自己把這種DLL叫做‘Plugins’,也只是‘趕潮流’,傍個(gè)好聽的名字便于去吹牛而已,沒(méi)想后來(lái)發(fā)現(xiàn)這還真是一種Plugins的實(shí)現(xiàn)方式,非常地驚訝。。。
    當(dāng)然了,自己的這個(gè)‘Plugins’實(shí)際就是簡(jiǎn)單的DLL調(diào)用,原理很簡(jiǎn)單--定義幾個(gè)標(biāo)準(zhǔn)接口,作為‘Plugins’的DLL實(shí)現(xiàn)這些接口,然后應(yīng)用掃描指定的DLL文件,并檢查這些接口是否存在,如果存在,就加載到應(yīng)用中,使用是,調(diào)用定義好的接口來(lái)完成所需功能。

    下面是定義的接口類:

#ifndef __ACTIVITYOBJECT_H__
#define __ACTIVITYOBJECT_H__

#include 
"wx/wx.h"

class CDBAccess;

class ActivityObject
{
public:
    
struct PropertyData
    
{
        wxString m_strLabel;
        wxString m_strName;
        wxString m_strVersion;
        wxString m_strAuthor;
        wxString m_strDescription;
        wxString m_strDetail;
    }
;
public:
    ActivityObject();
    
virtual ~ActivityObject();

    
virtual int Init(int fparam = 0int sparam = 0return 0; }
    
virtual void Final() {}

    
virtual int LoadProperty(PropertyData& data) const = 0;

    
virtual int Run() = 0;

    
virtual bool NeedDBAccess() const return false; }
    
virtual bool NeedTagAccess() const return false; }

    
void SetDBObject(CDBAccess* obj);
protected:
    CDBAccess
* _objDBAccess;
}
;

#endif

    然后是調(diào)用接口的代碼:
int CPluginObject::LoadPlugin(int index, const wxString &plugfile)
{
    wxDynamicLibrary lib(plugfile);
    
if(!lib.IsLoaded())
        
return -1;

     GetActivityPtr ptr 
= (GetActivityPtr)lib.GetSymbol(wxT("GetActivity"));
     ActivityObject
* act = ptr();
     ActivityObject::PropertyData data;
     
if(act->LoadProperty(data) == 0)
     
{
         _mapActivity.insert(std::make_pair(index, plugfile));

         g_objTrigger.OnPluginLoad(index, data);
     }

     lib.Unload();

     
return 0;
}

   具體功能實(shí)現(xiàn)代碼在這里:
class WordExport : public ActivityObject
{
public:
    WordExport();
    
virtual ~WordExport();

    
virtual int Init(int fparam = 0int sparam = 0return 0; }
    
virtual void Final() {}

    
virtual int LoadProperty(PropertyData& data) const;

    
virtual int Run();

    
virtual bool NeedDBAccess() const return true; }

}
;

extern WordExport* _theActivity;

#include <windows.h>

#include 
"Exports.h"
#include 
"WordExport.h"

LINGOSHOOK_PLUGINS_API ActivityObject
* GetActivity()
{
    _theActivity 
= new WordExport();
    
return _theActivity;
}


int DLLInit()
{
    
return 0;
}


void DLLFinal()
{
    
if(_theActivity != NULL)
        delete _theActivity, _theActivity 
= NULL;
}


///////////
BOOL APIENTRY DllMain(HANDLE hModule, DWORD uCallReason, LPVOID pReserved)
{
    
switch(uCallReason)
    
{
    
case DLL_PROCESS_ATTACH:
        
if(DLLInit() != 0)
            
return FALSE;
        
break;
    
case DLL_THREAD_ATTACH:
        
break;
    
case DLL_THREAD_DETACH:
        
break;
    
case DLL_PROCESS_DETACH:
        DLLFinal();
        
break;
    
default:
        
return FALSE;
    }
;

    
return TRUE;
}


////

WordExport
* _theActivity = NULL;


WordExport::WordExport()
: ActivityObject()
{
}


WordExport::
~WordExport()
{
}


int WordExport::LoadProperty(PropertyData& data) const
{
    data.m_strLabel 
= wxT("WordExport");
    data.m_strName 
= wxT("Word Export");
    data.m_strVersion 
= wxT("0.0.1");
    data.m_strAuthor 
= wxT("codejie");
    data.m_strDescription 
= wxT("Export words from LingosHook to a Text file.");
    data.m_strDetail 
= wxT("NONE.");

    
return 0;
}


int WordExport::Run()
{
    
return -1;
}


    運(yùn)行時(shí)的樣子如下:


    怎么樣,挺像回事吧。。。

posted on 2010-12-29 01:10 codejie 閱讀(1986) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C++輪子精神LingosHook

評(píng)論

# re: LingosHook:Plugins[未登錄](méi) 2010-12-29 11:22 潘孫友

灰常像樣了,呵呵  回復(fù)  更多評(píng)論   

公告

Using C++

導(dǎo)航

統(tǒng)計(jì)

留言簿(73)

隨筆分類(513)

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产福利在线| 欧美激情综合色| 欧美福利小视频| 欧美成人午夜剧场免费观看| 久久久久久夜| 欧美h视频在线| 亚洲精品国产精品乱码不99| 欧美成人嫩草网站| 欧美大片免费观看在线观看网站推荐| 欧美**人妖| 日韩亚洲欧美在线观看| 亚洲欧美在线播放| 久久综合九色| 欧美日韩中文另类| 黄色一区二区在线观看| 亚洲激情社区| 亚洲综合精品一区二区| 欧美伊人久久| 亚洲国内精品在线| 性欧美暴力猛交另类hd| 欧美大香线蕉线伊人久久国产精品| 欧美日韩国产丝袜另类| 国产日韩亚洲欧美| 日韩西西人体444www| 欧美一级二级三级蜜桃| 欧美国产日本在线| 亚洲影院在线| 欧美激情视频给我| 激情综合网激情| 亚洲一区二区三区色| 蜜桃精品一区二区三区| 亚洲一本大道在线| 欧美韩日一区| 在线精品视频在线观看高清| 亚洲一二三区精品| 亚洲国产成人av在线| 欧美一级在线亚洲天堂| 欧美色网一区二区| 亚洲精品偷拍| 欧美不卡一卡二卡免费版| 亚洲一区区二区| 欧美日韩性生活视频| 亚洲激情一区二区三区| 久久一区二区三区av| 午夜精品久久久久久久白皮肤| 欧美另类69精品久久久久9999| 国模一区二区三区| 久久久久久91香蕉国产| 亚洲特黄一级片| 欧美午夜a级限制福利片| 亚洲国产成人在线视频| 另类成人小视频在线| 欧美影院午夜播放| 国产三级欧美三级日产三级99| 亚洲一区二区免费在线| 日韩网站在线| 欧美婷婷在线| 亚洲一区二区三区免费视频| 一本久道综合久久精品| 欧美三区免费完整视频在线观看| 99re亚洲国产精品| 亚洲美女91| 国产精品狼人久久影院观看方式| 国产区精品视频| 亚洲承认在线| 久久精品国产久精国产思思| 国产麻豆成人精品| 午夜一区不卡| 亚洲女人小视频在线观看| 国产精品美女久久久久av超清 | 亚洲国产精品欧美一二99| 久久亚洲视频| 亚洲精品在线观看免费| 91久久久久久国产精品| 欧美日韩高清在线| 亚洲欧美大片| 欧美亚洲日本国产| 亚洲第一偷拍| 日韩一级二级三级| 国产精品一级| 久久婷婷综合激情| 老司机午夜精品| 这里只有视频精品| 亚洲女爱视频在线| 亚洲电影免费观看高清完整版在线观看 | 国产精品免费区二区三区观看| 亚洲欧美在线免费观看| 亚久久调教视频| 最新高清无码专区| 亚洲一区二区三区久久| 国模 一区 二区 三区| 亚洲第一久久影院| 国产精品美女主播在线观看纯欲| 久久久亚洲综合| 欧美精品一区三区| 久久深夜福利免费观看| 欧美日韩18| 久热精品在线| 国产精品激情av在线播放| 老司机精品视频一区二区三区| 欧美丰满高潮xxxx喷水动漫| 亚洲男人av电影| 久久综合999| 欧美亚洲一区二区三区| 男女视频一区二区| 久久狠狠久久综合桃花| 欧美日韩国产色综合一二三四 | 亚洲国产欧美不卡在线观看 | 亚洲少妇最新在线视频| 136国产福利精品导航网址| 99国产精品99久久久久久粉嫩| 好看的亚洲午夜视频在线| 亚洲精选在线观看| 亚洲国产高清在线| 欧美一区二区三区视频免费播放| 一本色道久久综合| 欧美成人r级一区二区三区| 久久国产欧美日韩精品| 国产精品播放| 亚洲美女av网站| 亚洲精选91| 美女脱光内衣内裤视频久久影院| 久久国产精品久久w女人spa| 欧美午夜电影在线| 亚洲伦理在线| 日韩天天综合| 欧美激情一区二区三区成人| 美女图片一区二区| 国产一区二区三区在线观看免费视频| 中文在线一区| 亚洲女同精品视频| 欧美日韩小视频| 日韩天堂av| 亚洲在线观看免费| 国产精品久久久久国产精品日日| 亚洲靠逼com| 亚洲无线观看| 国产精品国产三级国产aⅴ入口| 亚洲美女av网站| 亚洲欧美bt| 国产午夜精品一区二区三区视频| 亚洲欧美大片| 久久久91精品国产一区二区三区| 国产欧美日本在线| 久久成人免费电影| 欧美大片第1页| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美福利视频在线| 亚洲电影免费在线| 99re6热在线精品视频播放速度| 欧美精品 日韩| 亚洲美女黄网| 欧美一区激情| 樱桃成人精品视频在线播放| 久久免费黄色| 亚洲精品看片| 午夜欧美大尺度福利影院在线看| 国产午夜亚洲精品羞羞网站| 欧美影院成人| 欧美黄色一级视频| 亚洲校园激情| 狠狠色伊人亚洲综合网站色| 久久综合久久美利坚合众国| 亚洲人精品午夜| 欧美一区二区在线看| 黄色成人在线免费| 一区二区电影免费在线观看| 午夜久久黄色| **欧美日韩vr在线| 欧美日韩在线大尺度| 欧美在线网站| 91久久精品国产91久久性色tv| 亚洲欧美日韩一区二区三区在线观看 | 亚洲男女自偷自拍| 伊人久久亚洲影院| 欧美视频日韩| 老牛嫩草一区二区三区日本| 99re6这里只有精品视频在线观看| 久久精品国产99国产精品澳门| 亚洲片在线资源| 国内精品一区二区三区| 欧美日韩精品系列| 久久免费国产精品1| 亚洲综合第一页| 亚洲精品一区二区在线| 美女露胸一区二区三区| 亚洲欧美三级在线| 亚洲乱码一区二区| 极品尤物久久久av免费看| 欧美日韩视频一区二区| 久久综合九色| 久久久www免费人成黑人精品| 中国女人久久久| 91久久在线播放| 欧美激情国产精品| 欧美96在线丨欧| 久色婷婷小香蕉久久| 久久riav二区三区| 亚洲欧美综合精品久久成人| 日韩亚洲不卡在线|