Qt+VS2019 創建並調用dll文件


1 背景

(1)將現有的能正常運行的qt項目轉化為dll,並在其他程序調用和顯示;
(2)已經在vs2019中裝了qt5.12.5的插件

2 思路

分兩步,先生成dll,然后再調用

3步驟

3.1 生成dll

(1)在vs中打開qt項目
image
如圖,依次點擊【擴展】——》【Qt VS Tools】——》【Open Qt Project File】,然后選擇要打開的Qt項目;
(2)配置屬性
image
a、打開項目的屬性文件,在【配置屬性】——》【常規】——》【配置類型】中選擇【動態庫(.dll)】;
image
b、在屬性文件的【連接器】——》【輸出文件】中,改為以.dll結尾的名稱;
(3)添加頭文件
a、添加定義宏的頭文件
image
如圖,在項目的heard files文件夾上,點擊鼠標右鍵,添加【新建項】,在新建項內選擇.h文件,並命名為XXX_global.h,在內容中添加如下代碼:

點擊查看代碼
#pragma once

#include <QtCore/qglobal.h>

#ifndef BUILD_STATIC
# if defined(SAMP8_2_LIB)
#  define SAMP8_2_EXPORT Q_DECL_EXPORT
# else
#  define SAMP8_2_EXPORT Q_DECL_IMPORT
# endif
#else
# define SAMP8_2_EXPORT
#endif
【注】這里需要添加預處理器定義

image
如上圖所示,在【屬性】——》【C/C++】——》【預處理器】——》【預處理器定義】,在里面添加頭文件中鏈接庫,即添加(SAMP8_2_LIB),頭文件中第4行代碼定義的啥,這里就輸入啥;
(b)添加函數接口頭文件
添加步驟同添加XXX_global.h的方式一樣,只是名字定義為XXX.h。在此文件中添加需要導出函數的聲明;

點擊查看代碼
#pragma once

#include "samp8_2_global.h"

class SAMP8_2_EXPORT Samp8_2
{
public:
    Samp8_2();
};
extern "C" SAMP8_2_EXPORT int getVersion();
extern "C" SAMP8_2_EXPORT int realmain(int argc, char* argv[]);
(4)實現頭文件中聲明的函數 【注】這里直接在當前項目的mian函數中,添加頭文件,並修改mian函數的名字為realmain,代碼如下:
點擊查看代碼
#include "widget.h"
#include <QApplication>

#include"samp8_2.h"

int realmain(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

這就可以生成dll文件了,一般可在當前項目的的debug文件夾下查看。

3.2調用dll

(1)創建一個qt應用程序
image
如上圖所示。添加一個Qt widgets Application。
(2)配置程序屬性
【a】配置附加包含目錄
image
如上圖所示,在應用的【屬性】——》【C/C++】——》【附加包含目錄】中,添加生成dll項目頭文件所在的目錄;
【b】配置鏈接器附加庫目錄
image
如上圖,在【屬性】——》【鏈接器】——》【附加庫目錄】中,將庫的.lib所在的路徑添加進來;
【c】配置鏈接器中的附加依賴項
image
如上圖,輸入庫的.lib名字;
【d】復制dll文件到應用程序的運行目錄下;
可以手動復制dll到應用程序的運行文件夾下,也可以通過設置命令行進行自動復制;自動復制的設置如下:
image
在【屬性】——》【生成事件】——》【生成后事件】——【命令行】。輸入
xcopy /y /d "..\..\MathLibrary\$(IntDir)samp8_2.dll(自己的dll的路徑,絕對/相對都可以)" "$(OutDir)"

3.3調用庫文件中的函數

int c = realmain(argc, argv);

參考文獻

【1】https://blog.csdn.net/snail2651/article/details/80902328
【2】https://docs.microsoft.com/zh-cn/cpp/build/dlls-in-visual-cpp?view=msvc-170


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM