假設我們的DLL叫做MyQtBasedDll.dll
,它有一個導出的函數 - void MyEntryPoint()
。
我們將使用命令行rundll32.exe MyQtBasedDll.dll,MyEntryPoint
來運行它。請注意,您需要爲exe和dll提供完整路徑。
爲了使rundll32.exe
加載和使用該程序,MyEntryPoint()
應該有一個C調用約定。此外,我們需要一個QApplication
實例來完成任何GUI工作,而rundll32.exe
顯然不會爲我們創建它。
要創建Qt庫與Qt Creator中,我們可以選擇文件 - >新建文件或項目 - > Libraries-> C++庫,項目名稱應該是MyQtBasedDll
。
的MyEntryPoint()
函數的代碼非常簡單:
extern "C"
{
__declspec(dllexport) void MyEntryPoint()
{
if (!QApplication::instance()) {
QApplication a(__argc, __argv);
QMessageBox::aboutQt(0);
} else {
QMessageBox::aboutQt(0);
}
}
}
該功能可以由相同的exe被調用多次,並且每一次一個新QApplication
對象被構造,只對功能的持續時間。請注意,我們檢查現有的實例,以便我們的DLL即使在被Qt應用程序調用時也能工作。
現在,您只需用您的功能代替QMessageBox::aboutQt(0);
即可完成有用的功能!
這是一個真正的問題,或者現在是這樣的博客 – Brandin
@Brandin「分享你的知識,問答風格」 - 有一個選項,你不知道嗎?此外,在[博客](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/)工作人員說 - *要清澈透明,要求和回答你自己的問題不僅僅是可以的,它是明確鼓勵的。* – sashoalm