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