使用qt调用c#编写的dll库

news2025/1/23 22:26:39

问题背景

我需要使用qt编写界面程序来操作设备,设备厂家提供了一个使用C#编写的dll库,里面包含了各种操作设备的函数。而我不想学习C#,使用C++来调用dll库的话,不论是显示调用(提供h文件,dll文件)、还是隐式调用(h、lib、dll),目前条件都不满足,经过查找资料,以下方法可以解决,特此记录。
c#库

条件配置

首先要确保自己的vs中有下图黄色部分的模块,如果没有,需下载
在这里插入图片描述

编写代码

在vs中创建下图所示的新项目
在这里插入图片描述
右键点击引用,将dll库引用进来,然后创建头文件,如下图所示:
在这里插入图片描述

#pragma once
using namespace System;
using namespace System::Reflection;

__declspec(dllexport) bool Connect_api(short iDevice) {
	ImacFxDll::ImacFxDllT obj;
	return obj.Connect(iDevice);
}

__declspec(dllexport) bool Close_api(short iDevice) {
	ImacFxDll::ImacFxDllT obj;
	return obj.Close(iDevice);
}

__declspec(dllexport) bool MoveDeviceToPos_api(short iDevice, short nAxis, double pos, double vel, bool isAbsolute) {
	ImacFxDll::ImacFxDllT obj;
	return obj.MoveDeviceToPos(iDevice, nAxis, pos, vel, isAbsolute);
}

__declspec(dllexport) bool SHome_api(short iDevice, short nAxis) {
	ImacFxDll::ImacFxDllT obj;
	return obj.SHome(iDevice, nAxis);
}

alt + F7调出项目属性选项
在这里插入图片描述
在配置类型中选择dll/lib,然后选择release,右键点击项目,选择生成。可以在文件夹中看到生成的lib和dll
在这里插入图片描述

qt配置1

因为qt默认使用的编译器是MinGW,而MinGW引用lib库的方式和MSVC有区别,具体为:

使用#pragma comment(lib, path) 这是 MSVC 专有的表达式

在mingw中是则不行,需要在Qt的pro文件中加入 LIBS += -lxxx 即可

比如:

msvc中:

#include <Shlwapi.h>
#pragma comment(lib, "C:/shlwapi.lib")

minGw:

pro文件添加:

LIBS += -lshlwapi
添加头文件:

#include <Shlwapi.h>
备注: mingw使用msvc的方式 会发出 warning: ignoring #pragma comment  [-Wunknown-pragmas]

使用MSVC

如果需要将qt的编译套件更换为MSVC,打开qtcreator,点击工具——选项——kits,可以看到此时支持的构建套件,而我的qt在这个时候还不支持,配置方法如下:

  • 打开Visual Studio installer
  • 点击修改
  • 将已勾选的组件更换为2017的组件,选择修改在这里插入图片描述
    此时我的qt貌似自动识别了msvc的组件在这里插入图片描述
    如果没有自动识别,可以在编译器中指定
问题1

在替换成msvc后出现了许多报错:main.cpp:96: error: cannot initialize object parameter of type ‘QWidget’ with an expression of type ‘MainWindow’,大致就是许多qt的组件相关的语句都红了

改正:在qtcreator中选择帮助(help)-关于插件(about plugins),将下图画框的选项取消勾选,就可以了在这里插入图片描述

使用MinGW

右键点击项目名,引入库就行啦

qt编码

将cpp生成的lib库拷贝到qt工程的目录中
在这里插入图片描述
编写代码

#include "mainwindow.h"
#include "ui_mainwindow.h"

#pragma comment(lib, "D:/testdll/ImacFxCPP.lib")

__declspec(dllimport) bool Connect_api(short iDevice);

__declspec(dllimport) bool Close_api(short iDevice);

__declspec(dllimport) bool MoveDeviceToPos_api(short iDevice, short nAxis, double pos, double vel, bool isAbsolute);

__declspec(dllimport) bool MoveToPosByType_api(short iDevice, short nAxis, double fToStart, double fToEnd, double fToSpeed, double fStartEqu, double fEndEqu, double fStepPos, double fSpeed, double fDeltaStep, int iTime);

__declspec(dllimport) bool SHome_api(short iDevice, short nAxis);

__declspec(dllimport) bool Stop_api(short iDevice, short nAxis);


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ImacFxDllT Imac = new ImacFxDllT();
    short iDevice = 0;
    Imac.Connect(iDevice);
}

太麻烦了,还是用c#写了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统复习】第4章 进程同步

进程同步的概念 主要任务 ➢ 使并发执行的诸进程之间能有效地共享资源和相互合作&#xff0c;从而使程序的执行具有可再现性。 进程间的制约关系 ➢ 间接相互制约关系(互斥关系) • 进程互斥使用临界资源 ➢ 直接相互制约关系&#xff08;同步关系&#xff09; •…

GDPU C语言 天码行空5

&#x1f648; 仅供参考,欢迎指正 填空(语法题) 1. 9.502. 03. 2.504. 3.505. 16. 07. 78. 09. 110. 011. 112. 113. 014. 115. 2416. 6017. 018. 319. 020. 64⭐ 直接拷贝输出就好 #include<stdio.h>int main(){// 1 // printf("%…

Java基础——日志,Logback入门

日志 &#xff08;1&#xff09;程序中的日志&#xff1a; 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以永久存储。&#xff08;2&#xff09;日志技术具备的优势&#xff1a; 可以将系统执行的信息选择性的记录到指定位置&#xff08;控制台&#xff0…

GEE:支持矢量机(SVM)分类教程

在Google Earth Engine平台上,使用支持向量机(SVM)进行土地利用分类是一种强大的技术。在本文中,我们将介绍如何使用GEE和SVM算法进行土地利用分类。 结果展示, 具体过程如下: 数据准备 首先,我们需要准备用于分类的地理空间数据,包括土地覆盖类型和地表特征数据。GE…

队列知识及编程练习总结

目录 一、背景知识 二、队列的应用 &#xff08;一&#xff09;在Spring中的应用 &#xff08;二&#xff09;在其他框架中的应用 &#xff08;三&#xff09;在实际开发中的应用 三、相关编程练习 &#xff08;一&#xff09;用队列实现栈 &#xff08;二&#xff09…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台&#xff0c;为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品&#xff0c;让模型应用更简单&#xff01;欢迎使用魔搭社区&#xff1a;ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 本篇主要讲解八大排序算法中的三种排序&#xff0c;分别是&#xff1a;插入排序、希尔排…

yum源配置

一、互联网yum源&#xff08;centos7为例&#xff09;: cd /etc/yum.repos.d/ && rm -f *.repo;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo…

Golang编译报错 ‘invalid char’

现象 最近在新电脑安装go环境&#xff0c;发现 golang 包名如果有汉字就不能编译运行。 具体来讲&#xff0c;就是 go mod tidy 报错 ‘invalid char’ 但是&#xff0c;我在以前的电脑上运行 go mod tidy 没有问题 原因 我对比了 go sdk 版本&#xff0c;旧电脑用 go 1.13…

Html5钢琴块游戏制作(音乐游戏)

当年一款手机节奏音游&#xff0c;相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法&#xff1a;点击下落的黑色方块&#xff0c;弹奏音乐。&#xff08;下落的速度会越来越快&#xff09; 可以进行试玩&#xff0c;手机玩起来效果会更好些。 点击…

Java就业前景如何?

Java还有出路吗&#xff1f;2023年的就业市场依然经历着面临挑战&#xff0c;很多有经验有技术的人被淘汰下来&#xff0c;而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的&#xff0c;也为IT行业的内卷推波助澜。在2023年想学习Java入行就…

面试造航母,入职拧螺丝,工资...

有粉丝跟我吐槽说&#xff1a;金三银四去面试软件测试岗&#xff0c;真的是面试造航母&#xff0c;入职拧螺丝&#xff0c;工资还低 这种现象很正常&#xff0c;因为找一个测试员&#xff0c;当然希望他能做的业务越多越好&#xff0c;最好像机器猫一样&#xff0c;啥事儿都能…

Chatgpt 实践经验分享

数据准备&#xff1a;ChatGPT 需要大量的训练数据来支撑模型的训练和优化&#xff0c;因此需要进行充分的数据准备。在数据准备方面&#xff0c;需要考虑数据的质量、覆盖范围以及数据的预处理方式等。模型训练&#xff1a;ChatGPT 使用端到端学习的方式训练模型&#xff0c;需…

自动控制原理模拟卷1

自动控制原理模拟题一 Question1 已知机械系统和电网络如下图所示,求解两个系统的传递函数,并证明这两个系统是相似系统. 解: 【图a系统】 由电网络原理图并根据复阻抗原理,可得系统传递函数为: E o ( s ) E i

离线安装k8s/kubernetesv1.17.1

条件&#xff1a; 3台没有网络的centos7.9服务器 1.系统优化 hostnamectl set-hostname k8s-master && bash #只在master节点上执行 hostnamectl set-hostname k8s-node1 && bash #只在node1节点上执行 hostnamectl set-hostname k8s-node2 && …

基于stm32单片机和rt-thread操作系统的智能灯

目 录 一、 总体概况 二、 各部分介绍 2.1 STM32F4开发板 2.2 光敏模块 2.3 麦克风模块 2.4 超声波模块 三、 RT-Thread介绍 四、 开发过程 五、 未来设想 六、 开发心得 总体概况 本次测试技术与信号处理课程作业&#xff0c;我利用了stm32单片机和rt-thread…

SpringBoot中使用WebSocket Demo

大概目录结构 依赖只引入了JSP 和SpringBoot整合WebSocket Spring Web index.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><meta charset"utf-8"><s…

STM32开发(十三)STM32F103 片内资源 —— 外部中断 按键 详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示一、基础知识点 外部中断/事件控制器主要特征&#xff1a; 每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达20个软件的中断/事件请求检测脉冲宽度低于APB2时…