首页 > 解决方案 > 在 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;
};

参数计算器.cpp

#include "stdafx.h"

paramCalculator::paramCalculator()
{
}

paramCalculator::~paramCalculator()
{
}

儿童班:

当前计算器.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);
};

当前计算器.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”就会成功更新。但是,当涉及到两个类之间的继承时,我正在努力寻找一种访问成员变量的方法。

我已经解决了这个问题,但无法解决我的问题。

提前致谢!

编辑:

为了让自己更清楚,这是控制台应用程序中调试窗口的两个图像。

包括继承,计算值不分配给相应的变量:

包括继承,计算的值不分配给相应的变量

没有继承导致计算的值被分配给相应的变量:

没有继承导致计算的值被分配给相应的变量

在后一个中,我只将 currentCalculator.h 文件中的 currentCalculator 类定义从

class PARAMCALCULATOR currentCalculator :
    public paramCalculator:

class PARAMCALCULATOR currentCalculator

两种变体在执行 DLL 时都以正确的方式计算值,但是只有后一种变体允许我在执行 DLL 后仍然访问变量。

标签: c++inheritancedllvisual-studio-2017export

解决方案


推荐阅读