精华内容
下载资源
问答
  • 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,本文图文并茂给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • QT调用C#的Dll

    2021-12-08 10:41:53
    1:环境: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:43
    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 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:07
    Qt 调用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.dllCSdll.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工具dumpcpp 为DLL生成.h/.cpp文件调用C# COM组件 1.注册DLL 运行CMD命令,执行 regsvr32 xxx.dll, 注册COM组件,若失败,尝试以管理员运行CMD。 2. 生成.h/.cpp文件,加入工程 运行CMD命令,执行 ...
  • qt调用c#动态链接库真的是一件掉头发的事情,c#封装的DLL无法直接在C++语言下的qt中使用。 关于如何调用可以参考前辈的文章 QT(MinGW )方法:https://blog.csdn.net/u012902367/article/details/105128531 QT...
  • 本资源包括4个文件夹,myQtMainWindowDll文件夹里面是qt的工程文件;...CsharpUseQtDll文件夹里面是c#工程。 具体使用细节参见我的博客:https://blog.csdn.net/weixin_43935474/article/details/105531814
  • 我这里有个DLL文件,是用C#写的,托管式的,在QT 中应该怎么调用它?在网上找了很久还是不是很清楚
  • QT调用C#的DLL失败

    2020-01-15 10:32:37
    0.参考链接 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:00
    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#...
  • https://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的框架(包含案例),可以成功运行,自己创建一个C#窗口程序就可以调用调用的时候别忘了将dll所依赖的dll放在同一目录下,否则会报试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)。
  • 本例子适用范围:程序初学者。...2.c# 调用 QT C++ Dll (QT 工程中提供了 QTC++调用QTC++DLL例子) CSharp_Call_Cplusplus_Dll 例子: 针对2说明,目前只实现了网络连接,数据发送暂不行 能力有限,不喜勿碰,仅供参考
  • 一、制作可供程序调用的条码标签 ********** 测试使用Bartender 软件版本信息 ********* 1.条码设置 (1)打开bartender建立一个模板文件 (2)标签界面布局 a.新建条形码 b.新建二维码信息 ...
  • c#调用qt dll

    2019-03-15 10:49:02
    两种接口的使用 1. 返回类型为int的简单add函数 2. 回调函数
  • 上篇文章提到希望通过新代官网...在做之前可以先参考Qt程序中调用C#编写的dll博文,这篇博文细致介绍了QT项目调用C#编写的dll内的函数原理和调用步骤,真心给这篇博文点赞。在复现博文里面的功能函数的时候,顺手做...
  • 我使用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,我这边采用的实现方案是先用VS建好C#类库项目,再用VS创建CLR项目调用上一步生成的DLL,得到.lib和.dll供Qt项目调用。具体操作步骤参考的这篇博文: ...
  • C#程序调用外部的DLL, DLL是 C++的 QT程序编译的界面UI生成的DLL组件,C#采用的是控制台程序,QT是C++的 开发平台,生成的dll需要放到项目的指定位置,根据代码写的路径去放,或者代码根据放的位置去写路径
  • QT封装成dll,供C#调用,源码,仅供参考。
  • 以下内容参考该链接: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:22
    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...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,400
精华内容 2,960
关键字:

qt调用c#

c# 订阅