1:环境:VS2017 QT 5.12.4
(1)说明:Qt是不能直接调用C#生成的dll,需要将C#的编写的dll通过CLR编译成lib
(2)检查VS环境是否装好:看下图勾选部分是否安装,没有安装需及时安装,C#这边生成dll,C++这边用来生成lib文件
2:编写C#的Dll
选择下图所示功能进行编程,实际项目命名需规范对待
3:编写代码后,点击生成,生成解决方案后,在对应的项目文件夹bin/debug里面找到对应的Dll,代码及对应的Dll截图如下图,找到对应的dll后存储到自己找得到的位置,一会儿用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpDllTest
{
public class TestClass
{
public int Add_Num(int numberRight,int numberLeft)
{
int sum = numberRight + numberLeft;
return sum;
}
}
}
4:使用CLR生成Lib
创建CLR项目:如下图,选择CLR类库,命名在实际项目中需要规范对待,创建项目后,将刚刚得到的C#版的DLL放进项目文件中,代码中需要using,如下图右所示位置,
Dll放进项目中后,编写代码,此时代码与C#代码对应处理即可
代码如下,编写后点击生成,生成解决方案后,在项目文件夹中的X64/debug文件夹中即可找到对应的lib和dll文件,具体路径如下图,生成后,将dll和lib文件放到自己可以找到的位置,一会儿用,注意,VS中选择的X64环境或者X86环境,需要与QT对应,否则会出问题
#pragma once
using namespace System;
#using "./CSharpDllTest.dll"
using namespace CSharpDllTest;
extern "C" _declspec(dllexport) int api_Add(int numberRight,int numberLeft)
{
TestClass classTest;
return classTest.Add_Num(numberRight, numberLeft);
}
5:QT中使用Lib文件
创建QT工程选择对应的X64或者X86即可,此处不截图
创建后分别把Lib和Dll文件放到项目文件夹和debug文件夹中,然后引用Lib文件,
选择项目,右键添加库,如下图
库文件选择后包含路径会自动补充,然后下一步,完成即可,
引用Lib文件代码如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
extern "C" _declspec(dllexport) int api_Add(int numberRight,int numberLeft);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int all=api_Add(5,9);
qDebug()<<"All:::::"<<all<<endl;
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果如下
后面如果说接口多了之后,是否考虑在QT里面用一个类去封装这些API