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

本文介绍了MingW版Qt如何调用C#编写的dll,包括两种常规方法:通过QLibrary.resolve调用和使用extern "C"导出的.lib文件链接。详细步骤涉及创建C#和C++项目,导出接口,以及Qt中的调用实现。
摘要由CSDN通过智能技术生成


接上篇,Qt程序中调用C#编写的dll https://blog.csdn.net/weixin_42420155/article/details/81060945

在Windows平台上的Qt分为MSVC和Mingw版

上篇为MSVC版的Qt进行调用,有网友留言和发邮件询问MingW版的Qt能否使用上篇“Qt程序中调用C#编写的dll”的那些调用方法。

首先,Qt本身也是用C++的,因此问题实质上是Mingw版的C++如何调用MSVC版C++编写的dll。

本文介绍两种常规方式。

一.通常MSVC写的dll里面的导出接口如果是普通C++编译方式,函数名称会变更(如add函数会变为 ?add7Z@N 之类),MingW里面resolve时可以直接就按变更后的接口进行如QLibrary.resolve("?add7Z@N"),这虽然算一种方法,但会不会给人一种乱码感觉?

二.MingW和MSVC的C调用接口是兼容的,C++接口需要特殊转换重构才可以实现dll互相调用(这个问题展开就有点大篇幅了,本文只针对Qt里面快速调用C#编写的dll而言),在这里C调用接口需要用到extern "C" 进行导出。(在导出后可以通过在mingw版的Qt通过链接该lib文件;或者extern "C"导出后继续采用上面第一种方式进行resolve,此时的resolve就可以直接用函数名,而没有两端的多余的?@N之类的符号了)

下面分别介绍两种方式的做法,针对两种方法写一篇Demo,希望对查找该资料的人有帮助吧。demo的过程如下:

编写环境:Win7,Qt5.3.2(mingw_x86),VS2013

1.打开VS2013,新建一个C#的Class Library项目(这里选择的是.Net Framework 4),项目名为CSharpDllMingW(与前篇相比,后面加了个MingW以示区分)

2.由于默认没有引入Forms等UI库,先在reference中添加引用System.Windows.Forms以便可以在测试中使用MessageBox等

3.最终C#编写的dll如下图,命名空间为CSharpDllMingW,公共类为CSharpClassMingW

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值