=======================================================================
以下代码
//PlayerData.h
struct PlayerData
{
};
//Player.h
class PlayerData; //应该为struct PlayerData;
class CPlayer
{
public:
static CPlayer* CreatePlayer(PlayerData* pInfo);
};
//Player.cpp
#include "PlayerData.h"
CPlayer* CPlayer::CreatePlayer(PlayerData* pInfo)
{
......
}
//PlayerManager.cpp
#incluce "Player.h"
void CPlayerManager::XXX(...)
{
CPlayer::CreatePlayer(xxxx);
}
错误为:编译通过,但Link出错,提示为PlayerManager::XXX函数无法识别该函数CPlayer::CreatePlayer(class PlayerData*)
=======================================================================
工程common中
class IAAA
{
virtual void OnTimer(time_t );
}
工程AAA.lib中
class CAAA
{
virtual void OnTimer(time_t );
}
工程BBB.exe
IAAA* p = CreateAAA();
time_t t;
p->OnTimer(t);
问题为:BBB.exe中调用OnTimer函数时,esp指针被破坏
原因为: 在AAA.lib中因为定义了宏_USE_32BIT_TIME_T,所以time_t被解析为long类型,
在BBB.exe中没有定义该宏,所以time_t被定义为__int64
函数执行时:
push 8字节大小的参数到堆栈 //BBB.exe中
函数体
ret 4 认为参数是long,所以只返回4个字节 //AAA.lib
所以esp被破坏