[英]Using a Qt library from a C program
Qt非常適合構建應用程序,但有一兩次我想用純C編寫的現有應用程序顯示一個很好的Qt對話框。
我想描述如何創建一個Qt-unaware程序可以使用的基於Qt的共享或靜態庫。 為了縮小問題范圍,讓我們假設我們調用一個顯示一些對話框或小部件的函數,並且在所有對話框都關閉之前不會返回。 否則,如果沒有來自托管過程的一些“合作”,它就無法完成 - 它必須至少為Qt運行消息泵。
在這個例子中,我將使用Windows程序rundll32.exe
來加載和執行一個顯示Qt about對話框的函數。
假設我們的DLL名為MyQtBasedDll.dll
,它有一個導出函數 - void MyEntryPoint()
。
我們將使用命令行rundll32.exe MyQtBasedDll.dll,MyEntryPoint
運行它。 請注意,您需要為exe和dll提供完整路徑。
為了讓rundll32.exe
加載並使用該程序, MyEntryPoint()
應具有C調用約定。 另外,我們需要一個QApplication
實例來做任何GUI的東西,而rundll32.exe
顯然不會為我們創建它。
要使用Qt Creator創建Qt庫,我們可以選擇File-> New File或Project-> Libraries-> C ++ Library ,項目名稱應該是MyQtBasedDll
。
MyEntryPoint()
函數的代碼非常簡單:
extern "C"
{
__declspec(dllexport) void MyEntryPoint()
{
if (!QApplication::instance()) {
QApplication a(__argc, __argv);
QMessageBox::aboutQt(0);
} else {
QMessageBox::aboutQt(0);
}
}
}
此函數可以由同一個exe多次調用,並且每次構造一個新的QApplication
對象時,僅在函數的持續時間內。 請注意,我們檢查現有實例,以便即使在Qt應用程序調用時我們的DLL也能正常工作。
現在您需要做的就是替換QMessageBox::aboutQt(0);
用你的功能做有用的東西!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.