C 框架程式設計動態載入模組(一)

2021-08-28 12:23:46 字數 2786 閱讀 6865

在之前分享的部落格中,我已經實現了乙個靜態載入的小框架,這個框架的模組已經在**中確定,一旦生成程式,模組將無法改變。但在實際應用的大型專案中,我們更傾向於使用動態載入模組的框架,這樣對於專案的移植更加靈活和方便,因此今天我就來實現這個效果,和大家一起分享。先看結果展示:

大家看這個**是不是有種眼花繚亂的趕腳,沒辦法,csdn只讓上傳5m的。這次的案例會用到資料庫設計、資料庫程式設計、**載入控制項、反射、系統listview控制項等等知識,實現比較複雜,所以我打算分兩部分來分享這個小框架的實現過程。

一、資料庫設計

資料庫的設計也比較簡單,我只新增了幾個必要字段,主鍵、模組名稱、動態庫路徑、類名稱、使能、排序、時間戳、圖示,如圖所示:

/// /// 對插入到資料庫中的空值進行處理

///

///

///

public static object todbvalue(object value)

else

}/// /// 對從資料庫中讀取的空值進行處理

///

///

///

public static object fromdbvalue(object value)

else

}/// /// 執行非查詢的資料庫操作

///

/// 要執行的sql語句

/// 引數列表

/// 返回受影響的條數

public static int executenonquery(string sqlstring, params sqliteparameter parameters)

return cmd.executenonquery();}}

}/// /// 執行查詢並返回查詢結果第一行第一列

///

/// sql語句

/// 引數列表

///

public static object executescalar(string sqlstring, params sqliteparameter parameters)

return cmd.executescalar();}}

}/// /// 查詢多條資料

///

/// sql語句

/// 引數列表

/// 返回查詢的資料表

public static datatable getdatatable(string sqlstring, params sqliteparameter parameters)

dataset ds = new dataset();

sqlitedataadapter adapter = new sqlitedataadapter(cmd);

adapter.fill(ds);

return ds.tables[0];}}

}}好了,以上我們的資料庫準備就基本ok了,下面看模組動態庫的準備。

二、準備載入模組

看過前兩期文章的朋友應該知道,我之前的模組是與主程式放在乙個專案中的,但實際應用中通常模組是分開的,這裡我需要新建乙個動態庫專案,將之前的**檔案新增進去即可。沒有做過之前專案的朋友也一樣,在新建的動態庫專案中新建幾個模組介面即可。

如圖所示,modulelib 就是我的模組動態庫專案,裡面新增了3個模組,大家根據自己需要設計。

三、設計配置頁

先來看設計效果吧:

介面設計也非常簡單乙個顯示的table,三個增、刪、改按鈕和兩個確認、取消按鈕就ok了,關於這個table,有很多第三方的控制項可以支援,我用過的有farpoint、dev gridcontrol等等,非常方便,大家也可以自行設計。這裡為了簡單實現,盡量不要其他工具,我使用了系統自帶的 listview 控制項。

使用 listview 控制項需要配置以下幾個屬性:

1. columns(表頭)

2. view (設定成details樣式)

3. gridlines(**線)

四、設計編輯頁

先看效果圖:

這個介面就更簡單了,只需要幾個文字框、下拉框、按鈕即可,這裡就不做講解了。強調一下就是下拉框的 dropdownstyle 屬性要設定成 dropdownlist,不允許編輯的狀態。

Lua動態載入模組

function reload modulename package.loaded modulename nil require modulename end 使用以上 即可重新載入乙個檔案。這樣修改完lua 後,可以不用重啟程式立刻生效。模組a a function a.test1 print 1...

nginx載入動態模組

不使用動態模組時 使用動態模組 不是所有的nginx模組都可以以動態模組方式加入nginx 載入方式參見nginx模組載入 需要注意的是 with http image filter module dynamic 如果採用動態模組的載入方式,那麼需要將 usr local src nginx 1.8...

Python動態載入模組

需求 實現乙個簡單的pyton程式,接收兩個引數 plugin name,data,根據不同的plugin name定位到不同的邏輯處理模組並進行輸出。實現方案 使用python的庫函式 load source,將外掛程式模組載入到乙個dict中key為模組名稱,value為類的例項,核心 def ...