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. 打乱版本的搭配顺序,调用将出现错乱。这又是为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为你修改完dll后 没有重新编译客户端