c++的动态链接库的问题

//头文件TaxCaculator.h
class _declspec(dllexport) TaxCalculator {
private:
    double income;
    double taxRate;
public:
        int a;
        int b;
    TaxCalculator(double income, double taxRate);
    ~TaxCalculator();
    virtual double calculate();
};
extern "C" _declspec(dllexport) TaxCalculator* CreateObjet (double income, double taxRate);
//实现文件TaxCaculator.cpp
#include "TaxCaculator.hpp"
TaxCalculator::TaxCalculator(double income, double taxRate){
    this -> income = income;
    this -> taxRate = taxRate;
      a = 2;
      b = 5;
}
TaxCalculator::~TaxCalculator(){
    
}
double TaxCalculator::calculate(){
    return (income * taxRate);
}
  • 以上程序生成dll,然后在同一个编译器中建立一个新的客户文件调用
#include "TaxCalculator.h"
#include <iostream>
int main() {
  TaxCaculator* caclulator = CreateObject(1000, 0.3);
    int a = calculator -> a;
    int b = calculator -> b;
  return 0;
}
  • 在dll文件中,改变a和b定义的位置,然后重新编译,客户文件重新调用新的dll文件,为什么两次的结果是颠倒的?这里不是很理解。
  • 同理,在dll文件中定义两个虚函数
    virtual int fa();  
    virtual int fb();  

分别实现之。 编译服务器端和客户端。得到版本1.

改变定义顺序:

virtual int fb(); 
virtual int fa();

编译服务器端和客户端。得到版本2. 打乱版本的搭配顺序,调用将出现错乱。这又是为什么?

阅读 1.7k
1 个回答

因为你修改完dll后 没有重新编译客户端

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题