Qt调用易语言编译的DLL文件

最近需要将易语言的现有函数封装为DLL文件供Qt调用,由于本人属于菜鸟,搞了好久。目前基本解决问题。

现留个记号,以备后查。

易语言代码:

.子程序 l2g, , 公开, 农历转公历
.参数 y_l
.参数 m_l
.参数 d_l
.参数 l, 逻辑型
.参数 y_g, , 参考
.参数 m_g, , 参考
.参数 d_g, , 参考
.局部变量 gl, 日期时间型
农历转公历 (y_l, m_l, d_l, l, gl)
y_g = 取年份 (gl)
m_g = 取月份 (gl)
d_g = 取日 (gl)

.子程序 g2l, , 公开, 公历转农历
.参数 y_g
.参数 m_g
.参数 d_g
.参数 y_l, , 参考
.参数 m_l, , 参考
.参数 d_l, , 参考
.参数 l, 逻辑型, 参考
.局部变量 ll, 逻辑型
公历转农历 (到时间 (到文本 (y_g) + “-” + 到文本 (m_g) + “-” + 到文本 (d_g) + “-12-00-00”), y_l, m_l, d_l, l)


.子程序 lmDays, 整数型, 公开, 取农历月总天数  失败返回0
.参数 y_l
.参数 m_l
.参数 l, 逻辑型
返回 (取农历月总天数 (y_l, m_l, l))

.子程序 lyDays, 整数型, 公开, 取农历年总天数  失败返回0
.参数 y_l
返回 (取农历年总天数 (y_l))


.子程序 lmonth, 整数型, 公开, 取农历闰月  返回某年闰月月份,1到12,没有闰月则返回0。失败返回-1。
.参数 y_l
返回 (取农历闰月 (y_l))

.子程序 lJQ, 整数型, 公开, 取农历节气
.参数 y_l
.参数 m_l
.参数 d_l
.参数 l, 逻辑型
.局部变量 JQnum
取农历节气 (y_l, m_l, d_l, l, JQnum)
返回 (JQnum)

.子程序 fourNums, , 公开, 取四柱序号
.参数 y_g
.参数 m_g
.参数 d_g
.参数 h_g
.参数 mm_g
.参数 s_g
.参数 four1, , 参考
.参数 four2, , 参考
.参数 four3, , 参考
.参数 four4, , 参考
取四柱序号 (到时间 (到文本 (y_g) + “-” + 到文本 (m_g) + “-” + 到文本 (d_g) + “-” + 到文本 (h_g) + “-” + 到文本 (mm_g) + “-” + 到文本 (s_g)), four1, four2, four3, four4)

.子程序 jqHMS, , 公开, 取交节气时刻
.参数 y, , , 公历年份
.参数 JQnum, , , 节气序号
.参数 y_g, , 参考
.参数 m_g, , 参考
.参数 d_g, , 参考
.参数 h_g, , 参考
.参数 mm_g, , 参考
.参数 s_g, , 参考
.局部变量 dateTime, 日期时间型
dateTime = 取交节气时刻 (y, JQnum)
y_g = 取年份 (dateTime)
m_g = 取月份 (dateTime)
d_g = 取日 (dateTime)
h_g = 取小时 (dateTime)
mm_g = 取分钟 (dateTime)
s_g = 取秒 (dateTime)


Qt部分代码:

lib = new QLibrary("aa");
if(!lib->load())
    {
        qDebug() << "load library failed";
        qDebug() << lib->errorString();
    }
    else
    {
        fun0();
        fun1();
        fun2();
        fun3();
        fun4();
        fun5();
        fun6();
        fun7();
    }
void Widget::fun0()
{
    typedef int (*LMDAYS)(int, int, int);
    LMDAYS lmDays = (LMDAYS)lib->resolve("lmDays");
    qDebug()<<1<<lmDays(2000,1,0);
}

void Widget::fun1()
{
    typedef int (*LJQ)(int, int, int, bool);
    LJQ lJQ = (LJQ)lib->resolve("lJQ");
    qDebug()<<2<<lJQ(2001,1,1,false);
}

void Widget::fun2()
{
    typedef int (*LYDAYS)(int);
    LYDAYS lyDays = (LYDAYS)lib->resolve("lyDays");
    qDebug()<<3<<lyDays(2001);
}

void Widget::fun3()
{
    typedef int (*LMONTH)(int);
    LMONTH lmonth = (LMONTH)lib->resolve("lmonth");
    qDebug()<<4<<lmonth(2001);
}

void Widget::fun4()
{
    int y = 0, m = 0, d = 0;
    bool leap = 0;
    typedef void (*G2L)(int, int, int, int*, int*, int*, bool*);
    G2L  g2l = (G2L)lib->resolve("g2l");
    g2l(2023,3,23,&y,&m,&d,&leap);
    qDebug()<<5<<y<<m<<d<<leap;
}

void Widget::fun5()
{
    int y = 0, m = 0, d = 0;
    typedef void (*L2G)(int, int, int, bool, int&,int&, int&);
    L2G l2g = (L2G)lib->resolve("l2g");
    l2g(2018,1,1,false,y,m,d);
    qDebug()<<6<<y<<m<<d;
}

void Widget::fun6()
{
    int y = 0, m = 0, d = 0, h =0, mm= 0, s =0;
    typedef void (*JQHMS)(int, int, int&, int&, int&, int&, int&,int&);
    JQHMS jqHMS = (JQHMS)lib->resolve("jqHMS");
    jqHMS(2001,5,y,m,d,h,mm,s);
    qDebug()<<7<<y<<m<<d<<h<<mm<<s;
}

void Widget::fun7()
{
    int y = 0, m = 0, d = 0, h =0;
    typedef void (*FOURNUMS)(int, int, int, int, int, int, int&,int&, int&, int&);
    FOURNUMS fourNums = (FOURNUMS)lib->resolve("fourNums");
    fourNums(2001,5,25,20,10,10,y,m,d,h);
    qDebug()<<8<<y<<m<<d<<h;
}

在调试过程中发现如下问题:

使用MSVC方式qDebug()不论连续输出多少回传参数变量,总是最后两个变量值无法输出并且程序会崩溃;

使用minGW则没有该问题。


当多个函数的回传参数指向同一变量时,也会引起程序崩溃。


©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值