假设主程序定义并new了一个类CA的实例,然后将指向此实例的指针传递给一个Dll中的函数,该函数接受一个类CA的指针作为它的唯一参数。然后函数内部通过此指针去调用CA中的方法,此时程序代码将进入该Dll中执行,这并没有问题。但如果此时Dll中类CA的定义与主程序中的有所不同(例如Dll版本的CA中方法的实现不同,又或者多了一个不同的方法),这时函数调用将会发生什么情况?答案是:只要数据成员的声明(包括成员的个数、类型和排列顺序)不发生改变,则对任何类方法的调用将正常执行。请看以下代码:
//Included by main program.
//A.h
#pragma once
class CA
{
public:
CA(void);
~CA(void);
private:
int m_nValue;
public:
void Increase(void);
void PrintValue(void);
};
//Included by main program.
//A.cpp
#include "StdAfx.h"
#include "A.h"
CA::CA(void)
{
m_nValue=1234567890;
cout << "m_nValue = " << m_nValue << endl;
cout << endl;
}
CA::~CA(void)
{
}
void CA::Increase(void)
{
++m_nValue;
cout << "Increase(void) \tIn main program." << endl;
cout << endl;
}
void CA::PrintValue(void)
{
cout << "PrintValue(void) \tIn main program." << endl;
cout << "m_nValue = " << m_nValue << endl;
cout << endl;
}
在Dll中我们又重新定义了类CA:
//in A.h
#pragma once
class CA
{
public:
CA(void);
~CA(void);
private:
int m_nValue;
double m_dValue;
public:
void Dec