Qt 調用C#編寫的dll

環境信息

Qt是不能直接調用C#生成的dll,本文使用方法是將C#的編寫的dll通過CLR編譯成lib,環境信息:

  • VS2017
  • Qt 5.12.6(編譯器MinGW_32/64)

開始之前先看看VS有沒有安裝CLR:
在這裏插入圖片描述
在這裏插入圖片描述
看看C++/CLI支持是否勾選了,如果沒有需要勾選並點擊右下角的修改按鈕開始安裝:
在這裏插入圖片描述

編寫簡單的C#庫

在這裏插入圖片描述
代碼只寫了一個加法來做演示,下面這兩個名字和方法名後面會用到:
在這裏插入圖片描述
寫好過後就可以生成dll:
在這裏插入圖片描述
生成的dll後面會用到:
在這裏插入圖片描述

使用CLR生成lib

新建CLR項目:
在這裏插入圖片描述
把上面生成的dll拷貝到工程中來,代碼中需要using,
在這裏插入圖片描述
項目新建好後是這個樣子:
在這裏插入圖片描述
左邊是修改好後的Cdll.h,右邊是上面寫的C#代碼:
在這裏插入圖片描述

#pragma once
using namespace System;
#using "./CSdll.dll"   
using namespace CSdll;

extern "C" __declspec(dllexport) int c_add(int a, int b)
{
	CSdll::Class1 obj;
	return obj.csAdd(a, b);
}

改完過後就可以生成了,在生成之前可以根據自己的要使用的Qt的MinGW位數選擇對應的生成位數:
在這裏插入圖片描述
在這裏插入圖片描述
生成出來的下面兩個就可以在Qt中調用了:
在這裏插入圖片描述

新建Qt工程

使用Qt Creator
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
上面生成的是64位的,這裏也選64位的
在這裏插入圖片描述
建好後就把Cdll.lib放到工程下(位置無所謂,工程添加的時候會有路徑):
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
庫文件選了過後包含路徑回自動填充:
在這裏插入圖片描述
在這裏插入圖片描述
添加完後構建一下:
在這裏插入圖片描述
Cdll.dllCSdll.dll放到生成的exe同級目錄下:
在這裏插入圖片描述
修改代碼如下,運行後就可以看到運算結果,到此也就實現Qt引用C#編寫的dll:
在這裏插入圖片描述
注意名字:
在這裏插入圖片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

extern "C" __declspec(dllimport) int c_add(int a, int b);

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug()<<c_add(12, 9);
}

MainWindow::~MainWindow()
{
    delete ui;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章