QT 呼叫 DLL 的三種方法

2021-10-09 05:13:11 字數 1995 閱讀 4069

qt呼叫dll方法一:使用win32 api

**件

typedef bool (callback* setkeyboardhook)(hwnd);

hinstance hdll; // handle to dll

setkeyboardhook lpfndllfunc1; // function pointer

cpp檔案

void mainwindow::test()

}

else

}

}

顯式鏈結到 dll,應用程式必須:

1 呼叫 loadlibrary(或相似的函 數)以載入dll和獲取模組控制代碼。

2 呼叫 getprocaddress,以獲取指向應用程式要呼叫的每個匯出函式的函式指標。由於應用程式是通過指標呼叫dll的函式,編譯器不生成外部引用,故無需導入庫鏈結(不需要lib檔案)。

3 使用完 dll後呼叫freelibrary。

需要說明的是,typedef bool (callback* setkeyboardhook)(hwnd);是宣告想要呼叫的函式指標,這個函式的引數必須和dll裡面的一樣。setkeyboardhook是dll裡面「實際的函式名」,必須和標頭檔案裡面宣告的一樣,否則將會呼叫失敗。使用需要加windows.h標頭檔案。windows裡的qt是用mingw gcc來編譯,而mingw gcc可以支援win32的api。使用時並不需要包含dll的標頭檔案。編譯時可能會報錯error: cannot convert 'const char*' to 'lpcwstr ^,只要在pro檔案中新增defines-= unicode即可。

qt呼叫dll方法二:使用qt的api

對於呼叫dll的方法,qt原來本身就有相應的類來實現,用起來和win32的步驟差不多

**件

typedef bool ( *setkeyboardhook)(hwnd); //定義函式指標

cpp檔案

void mainwindow::test()

}

}

qt呼叫dll方法三:直接呼叫 dll

vc的引用庫檔案為***.lib, gcc的為***.a, 通過比較兩種庫檔案的格式,發現很相似。於是把***.dll,***.lib和***.h複製到qt的project下,直接把***.lib改為***.a, 根據qt的庫名字的格式, 在***.a的前面加上lib, 即為lib***.a。

再在qt的.pro文 件中最後面加上

libs += -l. –l*** //增加當前目錄下的lib***.a

在qt的原始檔中加上

#include 「***.h」

現在就可以直接呼叫***.h中的函式了。

// ***.h

#ifndef ***_h

#define ***_h

winapi int ***_func(void);

#endif

// main.cpp

#include 「***h」

#include

#include

int main(int argc, char *ar**)

label1.show();

return a.exec();

}總結:類似於呼叫dll的交叉程式設計使用的場合很多,還可以用qt生成dll,給其它工具呼叫。說到底,vc和qt等本質上都是一樣的,只是提供了不同的c++庫。

LabVIEW 呼叫 Python的三種方法

1.labpython 屬於openg庫 免費 此方法根據論壇反饋,不是特別好使用,因此不做敘述 我也沒用過 2.labview 2018 system inte ce 屬於labview 2018自帶介面 免費 labview 2018提供了3個python函式,如上圖所示 分別是open pyt...

python 呼叫shell命令三種方法

1.用os.system cmd 不過取不了返回值 2.用os.popen cmd 要得到命令的輸出內容,只需再呼叫下read 或readlines 等 如a os.popen cmd read 使用 a.rstrip 進行去除換行符 n 3.用 commands 模組。其實也是對popen的封裝。...

Linux 下系統呼叫的三種方法

系統呼叫 system call 是作業系統為在使用者態執行的程序與硬體裝置 如cpu 磁碟 印表機等 進行互動提供的一組介面。當使用者程序需要發生系統呼叫時,cpu 通過軟中斷切換到核心態開始執行核心系統呼叫函式。下面介紹linux 下三種發生系統呼叫的方法 舉例來說,我們通過 glibc 提供的...