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

发布了20 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u012902367/article/details/105128531