C++[语法]将类指针传递给Dll

本文探讨了C++类指针传递给DLL时遇到的问题,当DLL版本的类添加成员函数和数据成员并改变声明顺序时,导致内存结构变化,进而影响变量值。通过分析内存结构,揭示了DLL与主程序中类实例内存布局的差异,以及由此引发的潜在错误。
摘要由CSDN通过智能技术生成
假设主程序定义并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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值