gpt4 book ai didi

c++ - QLibrary 解析返回 false

转载 作者:行者123 更新时间:2023-11-30 04:32:25 26 4
gpt4 key购买 nike

我现在正在尝试动态包含类文件,并选择通过将 .dll 加载到 QLibrary 中来实现。我现在遇到的问题是,当我尝试调用 resolve() 方法时,它返回 0。

编辑:与此同时,问题已经解决,我决定编辑代码,以便其他人可以看到它是如何工作的:

这是 .dll 的头文件:

#ifndef DIVFIXTURE_H
#define DIVFIXTURE_H

#include<QObject>
#include<QVariant>

class __declspec(dllexport) DivFixture : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE DivFixture();
Q_INVOKABLE void setNumerator(QVariant num);
Q_INVOKABLE void setDenominator(QVariant denom);
Q_INVOKABLE QVariant quotient();

private:
double numerator, denominator;
};

#endif

这是 dll 的 .cpp 文件:

#include "testfixture.h"

DivFixture::DivFixture(){}

void DivFixture::setNumerator(QVariant num)
{
numerator=num.toDouble();
}


void DivFixture::setDenominator(QVariant denom)
{
denominator=denom.toDouble();
}


QVariant DivFixture::quotient()
{
QVariant ret;
ret=numerator/denominator;
return ret;
}

//non-class function to return pointer to class
extern "C" __declspec(dllexport) DivFixture* create()
{
return new DivFixture();
}

这就是我加载类的方式:

currentFixture.setFileName("C:\\somepath\\testFixture.dll");
if(currentFixture.load());
{
typedef QObject* (*getCurrentFixture)();
getCurrentFixture fixture=(getCurrentFixture)currentFixture.resolve("create");
if (fixture)
{
Fixture=fixture();
}
}

最佳答案

您需要使用 __declspec(dllexport) 导出您的类(class)

class __declspec(dllexport) DivFixture : public QObject
{

关于c++ - QLibrary 解析返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7671856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com