plug in 是乙個實現了乙個或多個介面的dll,下面我們將介紹在qt中如何建立plug in 和如何動態載入plug in
首先定義乙個inte***ce,並且用q_declare_inte***ce巨集告知qt meta-object system有這 樣乙個inte***ce,**如下:
class echointe***cevirtual qstring echo(const qstring &message) = 0;
};qt_begin_namespace
q_declare_inte***ce(echointe***ce,
"com.trolltech.plugin.echointe***ce/1.0");
qt_end_namespace
其次定義乙個plugin的類,必須從inte***ce繼承,並在.h用q_inte***ce告訴meta-object system我們的類支援這樣的inte***ce,具體**如下:
class echoplugin : public qobject, echointe***ce;
實現這個類並用q_export_plugin2(pluginname,class)匯出這個plugin,具體**如下:
q_export_plugin2(echoplugin, echoplugin);
建立合適的.pro檔案來編譯這個plugin,具體**如下:
template = libconfig += plugin
includepath += ../echowindow
headers = echoplugin.h
sources = echoplugin.cpp
target = $$qtlibrarytarget(echoplugin)
destdir = ../plugins
其中destdir 指定 dll 生成的路徑,target target的內容必須和q_export_plugin2中的pluginname一致;這樣我們就建立了乙個plug in,接下來我們看下如何動態載入plug in 。
我們通過qpluginloader 來載入 plug in , 具體**如下:
#if defined(q_os_win)
if (pluginsdir.dirname().tolower() == "debug" || pluginsdir.dirname().tolower() == "release")
pluginsdir.cdup();
#elif defined(q_os_mac)
if (pluginsdir.dirname() == "macos")
#endif
pluginsdir.cd("plugins");
foreach (qstring filename, pluginsdir.entrylist(qdir::files))
}這樣我們就完成了 乙個plug in 的建立和呼叫。
file:echoplugin.zip
物件的動態建立和釋放
new 動態地分配記憶體 delet 釋放記憶體 用new建立的物件只能通過指標訪問,建立物件時執行建構函式,有時候會出現記憶體不足,會出現異常。不再需要由new建立的物件時,用delete運算子釋放。否則會造成記憶體洩漏的情況。在釋放記憶體空間之前,自動呼叫析構函式,完成有關善後清理的工作。也就是...
linux 動態庫的建立和使用
動態庫相比動態庫有以下優點 由於不用靜態連線到使用庫的每個程式中,使用動態庫更節省記憶體 公升級方便,公升級動態庫,可以不用重新編譯使用庫的程式 注意 在x86架構下,使用動態庫可能降低效能。中的程式清單,只不過這次我們不生成靜態庫,而是生成動態庫。同時為了方便我們使用makefile檔案。plai...
C 物件的動態建立和釋放
使用類名定義的物件 請檢視 c 類的宣告和物件的定義 都是靜態的,在程式執行過程中,物件所佔的空間是不能隨時釋放的。但有時人們希望在需要用到物件時才建立物件,在不需要用該物件時就撤銷它,釋放它所佔的記憶體空間以供別的資料使用。這樣可提高記憶體空間的利用率。在c 中,可以使用new運算子動態地分配記憶...