Qt 调用C#编写的dll

Qt 调用C#编写的dll

  • 环境信息
  • 编写简单的C#库
  • 使用CLR生成lib
  • 新建Qt工程

环境信息

Qt是不能直接调用C#生成的dll,本文使用方法是将C#的编写的dll通过CLR编译成lib,环境信息:

  • VS2017
  • Qt 5.12.6(编译器MinGW_32/64)

开始之前先看看VS有没有安装CLR:
Qt 调用C#编写的dll_第1张图片
Qt 调用C#编写的dll_第2张图片
看看C++/CLI支持是否勾选了,如果没有需要勾选并点击右下角的修改按钮开始安装:
Qt 调用C#编写的dll_第3张图片

编写简单的C#库

Qt 调用C#编写的dll_第4张图片
代码只写了一个加法来做演示,下面这两个名字和方法名后面会用到:
Qt 调用C#编写的dll_第5张图片
写好过后就可以生成dll:
Qt 调用C#编写的dll_第6张图片
生成的dll后面会用到:
Qt 调用C#编写的dll_第7张图片

使用CLR生成lib

新建CLR项目:
Qt 调用C#编写的dll_第8张图片
把上面生成的dll拷贝到工程中来,代码中需要using,
Qt 调用C#编写的dll_第9张图片
项目新建好后是这个样子:
Qt 调用C#编写的dll_第10张图片
左边是修改好后的Cdll.h,右边是上面写的C#代码:
Qt 调用C#编写的dll_第11张图片

#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 调用C#编写的dll_第12张图片
Qt 调用C#编写的dll_第13张图片
生成出来的下面两个就可以在Qt中调用了:
Qt 调用C#编写的dll_第14张图片

新建Qt工程

使用Qt Creator
Qt 调用C#编写的dll_第15张图片
Qt 调用C#编写的dll_第16张图片
Qt 调用C#编写的dll_第17张图片
Qt 调用C#编写的dll_第18张图片
上面生成的是64位的,这里也选64位的
Qt 调用C#编写的dll_第19张图片
建好后就把Cdll.lib放到工程下(位置无所谓,工程添加的时候会有路径):
Qt 调用C#编写的dll_第20张图片
Qt 调用C#编写的dll_第21张图片
Qt 调用C#编写的dll_第22张图片
库文件选了过后包含路径回自动填充:
Qt 调用C#编写的dll_第23张图片
Qt 调用C#编写的dll_第24张图片
添加完后构建一下:
Qt 调用C#编写的dll_第25张图片
把Cdll.dll和CSdll.dll放到生成的exe同级目录下:
Qt 调用C#编写的dll_第26张图片
修改代码如下,运行后就可以看到运算结果,到此也就实现Qt引用C#编写的dll:
Qt 调用C#编写的dll_第27张图片
注意名字:
Qt 调用C#编写的dll_第28张图片

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

你可能感兴趣的:(Qt)