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

发布于 2022-09-12 02:14:00 字数 1327 浏览 9 评论 0

//头文件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. 打乱版本的搭配顺序,调用将出现错乱。这又是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一生独一 2022-09-19 02:14:00

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文