專案分析 PLUG

2021-09-06 17:25:28 字數 2042 閱讀 5232

plug過程

1.init_plug

#define init_plug plug::initplug g_initplug(true);

//共享記憶體資料結構

struct

plugsharememory

;inline

void createsharememory(i_plugmodulemanage*pmm)

; getsharememoryname(id_name);

);

if (!memhand)

return

;

void* pbuf = plugmapviewoffile(memhand);//

對映檔案對映到程序空間中,pbuf就是對映之後的指標

//第一次開啟, 儲存資料

plugsharememory* psm = new

plugsharememory;

memcpy(pbuf, &psm, sizeof(psm));//

將psm的指標的值複製到對映位址中去,看出共享的就是psm的指標的值

plugunmapviewoffile(pbuf);

psm->pfirsthand = memhand;//

儲存對映檔案的控制代碼

psm->pbuffer = pmm;//

將pmm的值複製到共享記憶體中,由pmm就可以操作共享記憶體了,設計還是很巧妙的

}inline

bool __stdcall dllloadcontorl::loaddll(std::wstring filename)//

總共會載入三個目錄下的dll

//保持它在記憶體中,此類退出時自動釋放

m_ahdllhandle[m_dwdllcount] = hinst;//

將dll儲存在m_ahdllhandle中

++m_dwdllcount;

return

true;}

在呼叫return loadlibraryw(lplibfilename);會自動呼叫plug_component_auto_reg具體為什麼會自動呼叫我也不明白

plug_component_auto_reg(demo)

//do not edit this

#define plug_component_auto_reg(projectname) \i_##projectname*__stdcall new##projectname()\

\

void __stdcall delete##projectname(void*p)\

\plug::autoreg projectname##autoreg(#projectname, (

void*)new##projectname, (void*)delete##projectname);\

void

__stdcall reg##projectname()\

\看這個巨集定義了建立例項和刪除例項的函式指標,然後呼叫autoreg

inline

void __stdcall plugmodulemanage::push(const

char* id, void* pnewinstance, void*pdeleteinstance)}2

.new

#define new(projectname) (struct i_##projectname*)(plug::plugcreeateinstance(#projectname))根據projectname在儲存模組的容器中查詢

try3

.del

#define del(instance) plug::plugdeleteinstance(instance)同樣在m_instances中根據例項指標查詢,找到指標刪掉

fun(p);

//呼叫例項的刪除函式,即呼叫例項的析構函式所以在這個函式裡可能還會調釋放元件,這時一定把鎖放開???

上面乙個簡單的plug的工作流程

這個plug幾次嘗試去看,都看一半,現在終於完整的看了一下。

spring mvc 專案分析

分包 controller dao dao.impl service service.impl model util 資料校驗 資料轉換 資料計算等 在model包新建乙個page類以便分頁操作 建立乙個servicemanager來管理service 配置檔案 分三個 hibernate 資料來源...

DTMF VAD 專案分析

這一專案是準確的找出dtmf訊號的起點,當檢測到後,觸發dtmf decoder,對此後接收的資料進行解碼,等到相應的撥號鍵值。1.分析輸入訊號特徵 訊號是dtmf訊號加通道中的電路雜訊,現初步分析,這背景雜訊是高斯背景雜訊,這種雜訊好在對dtmf頻率特性損失不是很大,這樣問題會好解決一點。2.訊號...

小專案分析

偽 編寫 提示使用者 輸入乙個姓名search name input 根據這個姓名,依次到名片字典中進行比對 依次拿到每乙個字典 for 變數 in 資料容器 得到第乙個名片字典,就與search name比一下,看字典中的name鍵的值 與它是否一致 變數 name search name 得到第...