如何解决在 C++ 中导出父类和基类
我正在尝试创建一个由包括继承在内的 C++ 类组成的 DLL。 DLL 应该被某个控制台应用程序访问。
父类:
参数计算器.h
#ifdef MY_EXPORTS
#define PARAMCALCULATOR __declspec(dllexport)
#else
#define PARAMCALCULATOR __declspec(dllimport)
#endif
class PARAMCALCULATOR paramCalculator
{
public:
paramCalculator();
~paramCalculator();
float m_current;
};
paramCalculator.cpp
#include "stdafx.h"
paramCalculator::paramCalculator()
{
}
paramCalculator::~paramCalculator()
{
}
子类:
currentCalculator.h
#ifdef MY_EXPORTS
#define PARAMCALCULATOR __declspec(dllexport)
#else
#define PARAMCALCULATOR __declspec(dllimport)
#endif
class PARAMCALCULATOR currentCalculator :
public paramCalculator
{
public:
currentCalculator();
~currentCalculator();
float m_tubePower = 1500;
float m_tubeCurrent;
void calcCurrent(float vo);
};
currentCalculator.cpp
#include "stdafx.h"
currentCalculator::currentCalculator()
{
}
currentCalculator::~currentCalculator()
{
}
void currentCalculator::calcCurrent(float vo)
{
m_tubeCurrent = m_tubePower / vo;
std::cout << m_tubeCurrent << std::endl;
m_current = m_tubeCurrent;
}
访问 DLL 的控制台应用程序如下所示:
#include "paramCalculator.h"
#include "currentCalculator.h"
class tubeCurrent
{
public:
tubeCurrent() {};
~tubeCurrent() {};
void setParam(float v)
{
ab.calcCurrent(v);
m_current = ab.m_tubeCurrent;
}
currentCalculator ab;
float m_current;
};
int main()
{
tubeCurrent ac;
float voltage = 200;
ac.setParam(voltage);
}
运行控制台应用程序时,它在输出窗口上显示“7.5”,这是当前的预期计算值。这告诉我访问 DLL 有效。但是,变量 m_tubeCurrent 和 m_current 尚未更改为值 7.5。谁能告诉我如何解决这个问题并让两个变量更新其值?
在一些测试中,我发现只要删除两个类之间的继承关系,成员变量“m_tubeCurrent”就会成功更新。但是,当涉及两个类之间的继承时,我正在努力寻找访问成员变量的方法。
我已经解决了 this 个问题,但无法解决我的问题。
提前致谢!
编辑:
为了让我自己更清楚,下面是控制台应用程序中调试窗口的两张图片。
包含继承,并且计算值未分配给相应的变量:
没有继承导致将计算值分配给相应的变量:
在后一个中,我只更改了 currentCalculator.h 文件中的 currentCalculator 类定义
class PARAMCALCULATOR currentCalculator :
public paramCalculator:
到
class PARAMCALCULATOR currentCalculator
当 DLL 执行时,两种变体都以正确的方式计算值,但是只有后一种允许我在 DLL 执行后仍然访问变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。