qt5编写dll给c#调用

使用qt调用c#编写的dll库 我需要使用qt编写界面程序来操作设备,设备厂家提供了一个使用C#编写的dll库,里面包含了各种操作设备的函数。而我不想学习C#,使用C++来调用dll库的话,不论是显示调用(提供h文件,dll文件)、还是隐式调用(h、lib、dll),目前条件都不满足,经过查找资料,以下方法可以解决,特此记录。首先要确保自己的vs中有下图黄色部分的模块,如果没有,需下载。在vs中创建下图所示的新项目。 阅读详情

最近手头有个项目, qt编写dll, 实现串口通信, 并用c# wpf调用

参考文献: https://www.cnblogs.com/feiyangqingyun/p/3720777.html

这里使用的是qtwinmigrate的类库

移植上面作者实现dll时, 报了很多错,猜测可能是作者是qt4写的

qt dll

1. 目录树:

src是qtwinmigrate中的文件

main.cpp

#include "qmfcapp.h"
#include "windows.h"

//windows下DLL函数入口
BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReserved )
{
    static bool ownApplication = FALSE;

    if ( dwReason == DLL_PROCESS_ATTACH )
        ownApplication = QMfcApp::pluginInstance( hInstance );
    if ( dwReason == DLL_PROCESS_DETACH && ownApplication )
        delete qApp;

    return TRUE;
}

//定义函数回调指针
typedef void (CALLBACK *FunCallBack)(int par);
//定义回调函数
FunCallBack OnEvent=NULL;
//定义回调参数
int par;

//定义C语言类型导出事件函数
extern "C" __declspec(dllexport) void SetFunCallBack(FunCallBack fun,int p)
{
    OnEvent=fun;
    par=p;
}

//定义C语言类型导出函数
extern "C" __declspec(dllexport) int add(int i)
{
    //下面这段代码用来触发事件,如果仅仅是使用add函数的话可以删除.
    if (i==110){
        if (OnEvent){
            //当传入参数为110而且已经定义过回调函数的话,则触发事件.
            OnEvent(120);
        }
    }

    return i*2;
}

2. c#控制台程序

目录树

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace csharp_testdll
{
    class Program
    {
        //声明DLL中的函数
        [DllImport("qtdll.dll")]
        public static extern int add(int i);
        //声明DLL中的回调函数,即事件
        [DllImport("qtdll.dll")]
        public static extern void SetFunCallBack([MarshalAs(UnmanagedType.FunctionPtr)] CallbackFun pCallbackFun);
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void CallbackFun(int i);

        public static void HandleEvent(int i)
        {
            Console.WriteLine(i);
        }

        static void Main(string[] args)
        {
            CallbackFun HandleEventX = HandleEvent;
            SetFunCallBack(HandleEventX);
            Console.WriteLine(add(1));
            Console.WriteLine(add(110));
            Console.ReadLine();
        }
    }
}

命令行启动csharp-testdll.exe

好的东西就要分享

git: https://github.com/fox1997/qtdll

csdn:https://download.youkuaiyun.com/download/empty_android/11021563

Qt程序中调用C#编写的dll 最近在使用Qt整合以前的一个工具时,发现有几个dll是采用C#写的,当然可以把C#写的dll重新在Qt中用C++写,虽然这是几个C#写的dll的函数接口使用的参数都比较简单,只用了int和string类型等,但在函数内部却还使用了C#的专用一些类,如果重写还是很麻烦,就查找了一些文章,多数都是说采用把C#写的dll采用COM注册方式让Qt调用,但是这样又要重新编译以前的C#项目,实在是很麻烦,所以... 阅读详情

相关推荐

VS2019+QT(C++)调用C#的dll

由于Windows10的QT5.15项目需要与新代数控系统做数据交换,一开始打算尝试用OPC UA的,哪知收费价格死贵,新代的销售也是藏着掖着的,不得已另寻它径,然后发现了C#的dll,奈何没有C++版本,只有C#版本。C++编写的程序为非托管代码,C#编写的程序为托管代码。非托管代码调用托管代码的DLL不只有一种方式,本文采用了CLR的方式。说明:Qt是不能直接调用C#生成的dll,需要将C#的编写的dll通过CLR编译成libCLR相当于给C# dll文件套了一层C++认识的壳。

weixin_49607313的博客 2144

Qt创建动态库给C#调用,通过回调完成交互

qt

u011555996的博客 2897

Qt之调用C#的动态库

环境:VS2019+Qt5.12 1. CLR库安装 首先,如果你VS2019没有安装CLR库,那么操作步骤为: 打开 Visual Studio Installer 在已安装中点击修改 将使用C++的桌面开发的对V142(14.25)生成工具的C++/CLI支持 点击右下角的修改,安装完成后重启软件即可 2. 新建类库(.NET Framework) 注意:此处请确认选择用于创建C#类库(.dll)的项目 此时解决方案的视图为: 一个简单的测试直接在Class1......

朗朗上口就行啦的博客 5701

C#调Qt C++封装的dll以及C++回调

C#调Qt C++封装的dll以及C++回调 最近这几天一直在研究用C++封装成dll然后在winform里调用,包括调用C++里的回调函数,记录一下,学习的过程 我这个工程是用Qt C++封装一个往Linux上传文件的dll,然后在winform里调用,过程中遇到很多坑,简单记录一下: 1. 需要注意的就是C#和C++的字段对应关系,C#里用string,这里传参的时候是char*。 2. C#...

cst1234567的博客 2005

window下C#(winform)调用带界面的Qt库文件(DLL)

C# 与 Qt 混合编程,开发软件。 Qt编写功能模块给C#调用。 Qt带界面的控件给C#调用的常见的办法有两种: 如果不带界面的就很简单,这篇文章是介绍带界面的Qt组件给C#调用。 (1)Qt封装成COM组件方式给C#调用。 (2)Qt直接编译成DLL,导出接口给C#调用。 COM组件方式在之前的好几篇文章都有详细讲解。这篇文章介绍Qt直接编译成DLL,导出接口给C#调用。

5122

QT封装成dll,C#调用测试例子

QT封装成dll,供C#调用,源码,仅供参考。

QT调用C#的Dll

1:环境:VS2017 QT 5.12.4 (1)说明:Qt是不能直接调用C#生成的dll,需要将C#的编写的dll通过CLR编译成lib (2)检查VS环境是否装好:看下图勾选部分是否安装,没有安装需及时安装

m0_64970404的博客 5877

c#调用qt dll

两种接口的使用 1. 返回类型为int的简单add函数 2. 回调函数

Qt 调用C#编写的dll

Qt 调用C#编写的dll

会飞的蜗牛 8772

C#调用QT的dll方法

C#调用QT的dll方法,个人资料方法,仅供参考,如有哪位大虾有更好的方法,请留言

QT生成带界面的dll给c#调用

本资源包括4个文件夹,myQtMainWindowDll文件夹里面是qt的工程文件;build-qtdll-Desktop_Qt_5_12_2_MSVC2015_64bit-Release文件夹是qt编译生成的文件夹;QtReleaseDll文件夹里面是最重要的qtdialog.dll以及他所依赖的所有的库;CsharpUseQtDll文件夹里面是c#工程。 具体使用细节参见我的博客:https://blog.youkuaiyun.com/weixin_43935474/article/details/105531814

c#调用qtdll遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34208185的博客 504

Qt创建带界面的DLL给C#调用案例-20221226.zip

C# 与 Qt 混合编程,开发软件。 Qt编写功能模块给C#调用。 Qt带界面的控件给C#调用的常见的办法有两种: 如果不带界面的就很简单,这篇文章是介绍带界面的Qt组件给C#调用。 (1)Qt封装成COM组件方式给C#调用。 (2)Qt直接编译成DLL,导出接口给C#调用。 COM组件方式在之前的好几篇文章都有详细讲解。这个例子是一个完整的播放器例子,也就是Qt+mpv开发视频播放器给C#调用,主要是介绍Qt编译成DLL,导出接口给C#调用整体流流程,以及接口使用。

Qt程序中调用C#编写的dll(MingW版)-附源码

接上篇,Qt程序中调用C#编写的dll https://blog.youkuaiyun.com/weixin_42420155/article/details/81060945 在Windows平台上的Qt分为MSVC和Mingw版 上篇为MSVC版的Qt进行调用,有网友留言和发邮件询问MingW版的Qt能否使用上篇“Qt程序中调用C#编写的dll”的那些调用方法。 首先,Qt本身也是用C++的,因此...

CoastFF的博客 6661

SAP采购申请详述;以及采购计划协议/交货计划行

SAP采购申请详述;以及采购计划协议/交货计划行

saplakes的博客 4340

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

QT调用C#写的Dll

QT调用C#写的Dll 参见: https://blog.youkuaiyun.com/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net...

weixin_34040079的博客 1062

LSS(Lift, Splat, Shoot)算法解析

**LSS(Lift, Splat, Shoot)** 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过`Efficientnet`算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空间下进行特征融合和后续的语义分割任务。 本篇按照LSS代码的运行逻辑,结合论文对LSS算法进行解析。

超爱吃小蛋糕的66的博客 8680

Qt生成带界面的dll给c#调用的例程

QtCreator版本: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\TestQtDll4CSharp\myQtMainWindowDll文件夹下; 一个是c#的...

weixin_43935474的博客 6925

TMC2209的UART模式详解:如何用串口调试助手配置细分和电流(避坑指南)

本文深入解析TMC2209步进电机驱动器的UART模式,详细讲解如何通过串口调试助手配置细分和电流,包括硬件连接、通信协议、关键寄存器设置及高级功能应用。提供实战避坑指南,帮助开发者优化步进电机控制性能,适用于精密仪器、3D打印等场景。

weixin_29166013的博客 541

顶刊级科研绘图技巧

顶刊级科研绘图技巧

2401_89571885的博客 1156

QT调用C++写的Dll

C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方式是能够在Qt中直接调用C#dll的函数,但是Qt明显只能调用C++写的dll,所以就只能通过编写一个C++的dll导出接口供Qt调用,这个C++编写的dll对C#写的dll进行封装,这个C++的dll可以采用/CLR方式对C#编写的dll进行引用的,即将C++编写的dll中生成的.lib文件供Qt进行链接,由

u011555996的博客 3566

智能车图像处理14-进阶篇6--坡道的判定

这篇文章主要讲述智能车图像处理中 : 如何判断坡道

taiyuezyh的博客 9222
上一篇: Ubuntu下用文本编辑器 VS Code和 Cmake 编译调试HelloWorld C++程序
下一篇: WPF调用带界面Qt Dll
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值