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