-
2020-10-22 19:05:26
Qt采用的是C++语言,当用qt调用C#类库时不能直接调用,需用C++对类库进行封装
具体的方法参考大神的文章:
https://blog.csdn.net/weixin_42420155/article/details/81060945
其中可能出现的问题:
1.qt中 #pragma comment(lib,“ ”)语句出现问题
原因是#pragma语句是MSVC编译器中调用外接文件的语句,MinGW无法使用,
解决的方法为换MSVC编译器2.模块计算机类型“X64”与目标计算机类型“X86”冲突
原因是我的qtMSVC是64位的,而我的C++dll和C#dll都是32位的
解决的方法是在C++和C#生成解决方法是在vs中
生成--配置管理器--活动解决平台--下拉菜单<新建>--从此处复制设备改为X64
保证平台为X64更多相关内容 -
Qt程序中调用C#编写的dll(推荐)
2020-08-19 09:46:16主要介绍了Qt程序中调用C#编写的dll,本文图文并茂给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 -
QT调用C#的Dll
2021-12-08 10:41:531:环境:VS2017 QT 5.12.4 (1)说明:Qt是不能直接调用C#生成的dll,需要将C#的编写的dll通过CLR编译成lib (2)检查VS环境是否装好:看下图勾选部分是否安装,没有安装需及时安装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
-
qt调用c#编写的dll
2021-09-27 09:21:433.c#的dll + c++的clr工程dll + qt exe调用 ---- c#的dll编写(示例Class1.cs) ---- using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Class想法:
1.com的方式(自定义的c# dll可以,对于手边的dll文件,不行)
2.clr工程的方式(qt里面的moc直接和clr冲突,编译报错,不行)
3.c#的dll + c++的clr工程dll + qt exe调用
---- c#的dll编写(示例Class1.cs) ----
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibraryDll { public class Class1 { public int testDllMut(int a,int b) { return a * b; } } }
---- c++ clr的dll编写(示例testCppClrDll.h) ----
配置工程属性->添加引用->浏览(找到c# dll文件)->确定
testCppClrDll.h
#pragma once
using namespace System;
namespace testCppClrDll
{
public ref class Class1
{
public:
.....
};
}注:该文件导出的类只能子啊clr工程或者c#工程(exe/dll)中才能调用。调用方式参考其他文章。
因为上面的文件testCppClrDll.h内容中头using...托管资源,在Qt中无法直接#using...使用, 必须新建文件(如SolidClrDll.h,SolidClrDll.cpp)
SolidClrDll.h
#pragma once class __declspec(dllexport) Class2 { public: int mu2(int a,int b); }
SolidClrDll.cpp
#include "stdafx.h" #include "SolidClrDll.h" #include <iostream> using namespace ClassLibraryDll; int Class2::mu2(int a,int b) { Class1^ c1 = gcnew Class1(); return 2*c1->testDllMut(a,b); }
---- qt的控制台程序编写(示例Class1.cs) ----
#include <QtCOre/QCoreApplication> #include <QDebug> #include "../testCppClrDll/SolidClrDll.h" #pragma comment(lib,"../x64/Debug/testCppClrDll.lib") int main(int argc, char* argv[]) { QCoreApplication a(argc,argv); Class2 c2; qDebug() << c2.mu2(2,6); // 24 return a.exec(); }
-
Qt 调用C#编写的dll
2020-03-27 11:17:07Qt 调用C#编写的dllQt 调用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; }
-
QT 调用C# COM组件 (uuid 方法)
2020-09-27 09:55:07本方法使用qt工具dumpcpp 为DLL生成.h/.cpp文件调用C# COM组件 1.注册DLL 运行CMD命令,执行 regsvr32 xxx.dll, 注册COM组件,若失败,尝试以管理员运行CMD。 2. 生成.h/.cpp文件,加入工程 运行CMD命令,执行 ... -
关于qt调用c#动态链接库dll,接收多个string类型数据的方法
2020-10-28 10:11:51用qt调用c#动态链接库真的是一件掉头发的事情,c#封装的DLL无法直接在C++语言下的qt中使用。 关于如何调用可以参考前辈的文章 QT(MinGW )方法:https://blog.csdn.net/u012902367/article/details/105128531 QT... -
QT生成带界面的dll给c#调用
2020-04-23 23:38:46本资源包括4个文件夹,myQtMainWindowDll文件夹里面是qt的工程文件;...CsharpUseQtDll文件夹里面是c#工程。 具体使用细节参见我的博客:https://blog.csdn.net/weixin_43935474/article/details/105531814 -
QT调用C#写的DLL问题,请大家指教一下
2016-04-05 10:55:25我这里有个DLL文件,是用C#写的,托管式的,在QT 中应该怎么调用它?在网上找了很久还是不是很清楚 -
QT调用C#的DLL失败
2020-01-15 10:32:370.参考链接 Java的native方法:https://blog.csdn.net/wike163/article/details/6635321 什么是Native方法:https://www.jianshu.com/p/22517a150fe5 VS.chart:... Qt程序中调用C#编写的dll... -
Qt之调用C#的动态库
2021-10-12 13:47:47环境:VS2019+Qt5.12 1. CLR库安装 首先,如果你VS2019没有安装CLR库,那么操作步骤为: 打开 Visual Studio Installer 在已安装中点击修改 将使用C++的桌面开发的对V142(14.25)生成工具的C++/CLI支持 点击右... -
QT调用C#写的Dll
2019-01-02 13:52:00QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#... -
QT/C++调用C#代码COM方式【亲测可用】
2021-05-15 10:42:48https://www.cnblogs.com/guohu/p/4889067.html全部流程试过了没问题 但是很坑的一点是 每台电脑第一次使用都需要对COM组件进行注册 ... 注册COM组件的方法 如果你刚调用dll和则build生成dll是在... -
Qt程序中调用C#编写的dll
2018-07-16 13:59:21最近在使用Qt整合以前的一个工具时,发现有几个dll是采用C#写...如果重写还是很麻烦,就查找了一些文章,多数都是说采用把C#写的dll采用COM注册方式让Qt调用,但是这样又要重新编译以前的C#项目,实在是很麻烦,所以... -
c#调用QTdll的框架(包含案例)
2019-04-02 14:22:12c#调用QTdll的框架(包含案例),可以成功运行,自己创建一个C#窗口程序就可以调用, 调用的时候别忘了将dll所依赖的dll放在同一目录下,否则会报试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)。 -
c# 调用QT C++ /C# DLL例子
2020-11-05 14:37:55本例子适用范围:程序初学者。...2.c# 调用 QT C++ Dll (QT 工程中提供了 QTC++调用QTC++DLL例子) CSharp_Call_Cplusplus_Dll 例子: 针对2说明,目前只实现了网络连接,数据发送暂不行 能力有限,不喜勿碰,仅供参考 -
QT 调用Bartender C#动态库接口
2021-03-27 13:12:38一、制作可供程序调用的条码标签 ********** 测试使用Bartender 软件版本信息 ********* 1.条码设置 (1)打开bartender建立一个模板文件 (2)标签界面布局 a.新建条形码 b.新建二维码信息 ... -
c#调用qt dll
2019-03-15 10:49:02两种接口的使用 1. 返回类型为int的简单add函数 2. 回调函数 -
C++(QT)通过CLR调用C#编写的dll
2021-09-21 13:27:30上篇文章提到希望通过新代官网...在做之前可以先参考Qt程序中调用C#编写的dll博文,这篇博文细致介绍了QT项目调用C#编写的dll内的函数原理和调用步骤,真心给这篇博文点赞。在复现博文里面的功能函数的时候,顺手做... -
Qt 调用c# dll , 如何返回复杂的结构体?
2021-11-09 17:00:27我使用c++/cli给c# dll做好的封装。调用过程中只能返回简单的数据类型,如int, string 等,烦请各位,如何能够返回复杂的结构体?谢谢 -
Qt程序中调用C#编写的dll(MingW版)-附源码
2018-08-09 17:45:04接上篇,Qt程序中调用C#编写的dll ...上篇为MSVC版的Qt进行调用,有网友留言和发邮件询问MingW版的Qt能否使用上篇“Qt程序中调用C#编写的dll”的那些调用方法。 首先,Qt本身也是用C++的,因此... -
C# 调用Qt 库
2022-03-07 21:53:06因公司大部分底层库使用的Qt 开发,本人比较擅长C# ,且领导计划应用层用C# 而算法层用C++或者Qt,这就出现了混合编程的方式,现对C#的平台调用做一下总结。 公共语音运行库提供了一系列能够使托管代码与非托管代码... -
QT中调用C#封装的DLL如何传string类型的参数
2020-07-01 13:00:37当然我们知道不能直接在Qt中调用C#封装的dll,我这边采用的实现方案是先用VS建好C#类库项目,再用VS创建CLR项目调用上一步生成的DLL,得到.lib和.dll供Qt项目调用。具体操作步骤参考的这篇博文: ... -
C#程序调用外部的 C++的QT程序编译的界面UI的DLL
2020-08-06 16:36:23C#程序调用外部的DLL, DLL是 C++的 QT程序编译的界面UI生成的DLL组件,C#采用的是控制台程序,QT是C++的 开发平台,生成的dll需要放到项目的指定位置,根据代码写的路径去放,或者代码根据放的位置去写路径 -
QT封装成dll,C#调用测试例子
2021-06-30 16:30:58QT封装成dll,供C#调用,源码,仅供参考。 -
QT调用Saleae C#生成的dll文件
2022-02-23 13:20:32以下内容参考该链接:Qt程序中调用C#编写的dll(推荐) / 张生荣 创建CLR工程,填写如下代码,将C#的dll再次打包可供QT使用的dll文件: #pragma once #include #include "stdlib.h" #include "string.h" #include "ms... -
Qt生成带界面的dll给c#调用的例程
2020-04-15 12:00:22QtCreator版本:Qt Creator 4.0.3 Qt版本:Qt 5.6.1 (MSVC 2013,32 bit) C#程序开发环境:VS2015 电脑:win10 在我的例子中一共有2个工程: 一个是qt的工程:qtdll.pro,用来生成dll,该工程放在 F:\QTCode\TestCode...