• Qt中使用C#的dll


    记录一下Qt项目使用c#的dll

    1.生成C#的dll。

    代码:

    namespace mathDll
    {
    	public class MathLib
    	{
    		public int add(int a, int b)
    		{
    			return a + b;
    		}
    	}
    }
    

    image

    命令行:

    csc /t:library math.cs
    

    csc是C#的编译器,显然也是需要自己提前设置环境变量的。

    2.新建一个Qt项目,这里以控制台项目举例

    直接贴代码吧,利用dll中的类,以及它的共公有函数。

    代码:

    #include <QCoreApplication>
    #include <QDebug>
    #using "./math.dll"
    using namespace mathDll;
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        MathLib ^math = gcnew MathLib();
        qDebug()<<math->add(1,3);
        return a.exec();
    }
    
    

    至于引用dll的规范啥的,就需要自己了解了,本人也才接触,不是很懂。

    问题:直接运行,它会提示托管代码需要/clr选项。

    起初本来想着用vs2015打开这个项目,在配置里面修改为公共语言运行时支持的,结果又出现了新的错误。
    image

    新问题:/clr和/EHs命令行选项不兼容。

    image

    百度一搜:这就是正解了:

    博客

    按照该博客,回到Qt项目里面。

    在test.pro末尾添加以下语句即可。

    QMAKE_CXXFLAGS += /clr
    win* {
       QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
       QMAKE_CXXFLAGS_STL_ON = /EHa
    }
    
    

    然后重新qmake,再构建就好了。(必须先qmake一下)

    这是会报错找不到dll。

    所以,把math.dll复制到test.exe的同级目录下就好了。

    运行结果:

    image

    此外:需要注意的是,编译器是msvc2015 32bit。没试过mingw,因为感觉不行。

  • 相关阅读:
    redis安装
    查看数据库
    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
    java 面向对象基础
    SpringBoot简单公共返回类
    swift闭包_002_swift闭包
    swift的函数类型_001_swift函数类型基本使用
    swift函数_11_函数的嵌套使用
    swift函数_10_swift中函数基本使用
    swift可选类型_09_optional基本使用
  • 原文地址:https://www.cnblogs.com/dayq/p/16121788.html
Copyright © 2020-2023  润新知