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.dll和CSdll.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;
}