我能够在 Qt main.cpp 中创建类的实例,但我的应用程序在尝试访问 DLL 的类成员函数时崩溃。
我该怎么做?
如果这是我的 dll.h
#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();
}
这是我导入 DLL 库的 Qt 应用程序的 main.cpp
QLibrary library(("C:\\somepath\\testFixture.dll");
if (!library.load())
qDebug() << library.errorString() << endl;
if (library.load())
qDebug() << "library loaded" << endl;
DivFixture *r1=NULL;
typedef DivFixture* (*MyPrototype)();
auto myFunction = (MyPrototype)library.resolve("create");
qDebug()<<myFunction;
if (myFunction)
r1=Function(); // able to create instance of DivFixture
r1->quotient(); //I'm not able to access class member function
为什么我无法quotient()
使用类实例访问类成员函数?程序在这一行崩溃r1->quotient();
。typedef DivFixture* (*MyPrototype)();
我可以创建我的类的原型DivFixture
来访问其成员函数,而不是在 DLL 中创建函数的原型吗?