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

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>
            国产精品久久久免费| 久久国产精品一区二区三区四区 | 欧美日韩精品免费观看视一区二区| 欧美激情一区三区| 久久蜜桃精品| 亚洲人午夜精品| 亚洲福利av| 亚洲精选一区| 欧美亚洲第一区| 久久精品日产第一区二区三区| 欧美一区二区三区电影在线观看| 久久精品一二三| 久久久之久亚州精品露出| 99热这里只有成人精品国产| 一区二区国产日产| 国产亚洲欧美日韩日本| 六十路精品视频| 欧美精品久久一区二区| 久久岛国电影| 欧美美女bbbb| 久久蜜桃精品| 欧美日韩精品免费观看视频| 久久久91精品国产一区二区三区| 亚洲欧洲综合另类| 欧美午夜不卡视频| 久久综合九色综合欧美就去吻| 国产精品99久久不卡二区 | 久久久久网站| 日韩一级欧洲| 欧美在线黄色| 亚洲三级视频| 校园春色国产精品| 亚洲无玛一区| 女仆av观看一区| 久久精品国产一区二区三区免费看| 9人人澡人人爽人人精品| 国产一区自拍视频| 一区二区三区福利| 亚洲三级电影全部在线观看高清| 久久嫩草精品久久久精品一| 欧美激情欧美激情在线五月| 久久久久天天天天| 国产欧美日韩免费看aⅴ视频| 亚洲一区二区三区在线观看视频| 欧美激情久久久| 国产午夜精品全部视频播放| 在线视频精品| 中文国产亚洲喷潮| 免费看成人av| 欧美成人69| 在线免费不卡视频| 久久国产黑丝| 久久亚洲视频| 国产一区二区三区久久悠悠色av | 欧美日韩国产综合视频在线观看中文 | 欧美国产精品日韩| 国产精品推荐精品| 中国av一区| 亚洲欧美日韩国产一区| 欧美日韩视频在线一区二区| 亚洲三级网站| 亚洲视频免费看| 亚洲精品视频在线看| 免费人成精品欧美精品| 狂野欧美激情性xxxx欧美| 国产欧美一区二区白浆黑人| 亚洲视频免费观看| 欧美一区二区三区男人的天堂| 亚洲女性喷水在线观看一区| 亚洲欧美在线视频观看| 国产精品视频xxxx| 先锋影音国产一区| 久久久91精品国产| 亚洲高清色综合| 老司机免费视频一区二区| 母乳一区在线观看| 日韩午夜中文字幕| 国产精品av免费在线观看| 亚洲一区国产视频| 久久一区视频| 亚洲精品一区二区在线| 欧美日韩中国免费专区在线看| 久久久999成人| 亚洲福利在线看| 欧美精品成人一区二区在线观看| 午夜精品网站| 国产在线不卡精品| 欧美高清视频在线观看| 一区二区三区高清不卡| 性欧美超级视频| 亚洲国产精品综合| 国产精品卡一卡二卡三| 久久精品中文字幕一区二区三区 | 国产免费成人av| 欧美与欧洲交xxxx免费观看| 欧美成人精品在线播放| 亚洲一区精彩视频| 伊人夜夜躁av伊人久久| 欧美日韩一区三区| 久久国产精品久久国产精品| 亚洲人永久免费| 久久精品欧美日韩| 亚洲日本电影在线| 国产日韩欧美在线看| 欧美激情在线狂野欧美精品| 亚洲欧美视频在线观看| 91久久线看在观草草青青| 午夜亚洲影视| 一区二区三区久久| 亚洲一区中文| 91久久线看在观草草青青| 欧美在线免费一级片| 一本久道久久综合狠狠爱| 黑人一区二区| 国产精品毛片一区二区三区| 免费短视频成人日韩| 性欧美超级视频| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 老司机aⅴ在线精品导航| 艳妇臀荡乳欲伦亚洲一区| 韩国一区二区三区美女美女秀| 野花国产精品入口| 欧美激情一级片一区二区| 久久综合狠狠综合久久综合88| 国产精品视频yy9099| 欧美α欧美αv大片| 久久精品久久综合| 欧美一区二区久久久| 性做久久久久久久久| 免费观看日韩av| 欧美系列一区| 亚洲自拍偷拍麻豆| 久久国产精品99国产精| 亚洲美女性视频| 国模叶桐国产精品一区| 欧美午夜电影在线| 欧美精品一区视频| 久久久青草婷婷精品综合日韩| 欧美激情视频在线播放| 久久电影一区| 亚洲视频导航| 国产视频一区三区| 国产精品一区二区在线| 欧美不卡高清| 久久精品人人做人人爽电影蜜月| 国产精品色午夜在线观看| 欧美日韩一区在线观看| 欧美日本亚洲| 欧美午夜精品| 国产精品99一区| 国产精品丝袜91| 欧美特黄一级| 国产精品高潮粉嫩av| 国产精品日韩欧美大师| 国产精品区一区| 国产亚洲电影| 国内精品视频久久| 亚洲国产精品日韩| 亚洲精品欧美一区二区三区| 亚洲精品资源美女情侣酒店| 日韩系列在线| 亚洲欧美国产精品va在线观看| 欧美三级免费| 国产精品嫩草久久久久| 国产精品视频午夜| 国产婷婷色一区二区三区四区 | 亚洲女人天堂成人av在线| 一本大道久久a久久精二百| 亚洲国产精品va在看黑人| 亚洲黄色精品| 国产精品99久久久久久久vr| 欧美一区二区黄色| 蜜臀a∨国产成人精品 | 国产精品高清在线| 欧美成年人网站| 美女黄毛**国产精品啪啪| 久久久99精品免费观看不卡| 欧美v日韩v国产v| 国产精品萝li| 亚洲国产成人porn| 亚洲影视在线播放| 久久综合狠狠| 一区二区三区四区五区视频 | 亚洲国产精品一区在线观看不卡 | 午夜亚洲福利在线老司机| 久久人体大胆视频| 国产精品久久久久久久久果冻传媒| 午夜激情亚洲| 欧美成人午夜免费视在线看片| 欧美一区综合| 欧美日韩精品免费观看| 在线观看视频一区| 亚洲影院免费观看| 欧美电影免费观看高清完整版| 久久综合网hezyo| 亚洲免费精品| 你懂的视频欧美| 久久精品欧美日韩| 亚洲天堂成人| 亚洲人午夜精品|