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;
}