【发布时间】:2014-03-22 00:22:50
【问题描述】:
头文件中有很多结构。我正在想办法巩固它们。我知道必须有更好的方法来访问这些指针。我使用了一个名为 reclass 的程序;它所做的是基于指针和用户选择的其他数据类型创建结构。您将这些结构放入源代码中并使用它们。但是因为我的程序现在如此庞大。结构的布局方式。这让我很头疼。
这是我所拥有的(版本号示例):
class Level1ToVersionNumer
{
public:
char _0x0000[8];
char VersionNumber[12]; //0x0008
char _0x0014[44];
};//Size=0x0040
class Level0ToVersionNumber
{
public:
char _0x0000[20];
Level1ToVersionNumer* Level1PointerToVersionNumber; //0x0014
char _0x0018[40];
};//Size=0x0040
class BaseObjectWorld
{
public:
char _0x0000[32];
Level0ToVersionNumber* Level0PointerToVersionNumber; //0x0020
char _0x0024[1844];
ObjectTable* ObjectTablePtr; //0x0758
char _0x0748[760];
LocalPlayerLevel0* LocalPlayerLevel0Ptr; //0x0A54
char _0x0A44[1348];
NearLootTable* NearLootTablePtr; //0x0F88
volatile __int32 SizeOfNearLootTable; //0x0F8C
char _0x0F90[160];
FarLootTable* FarLootTablePtr; //0x1030
__int32 SizeOfFarLootTable; //0x1034
};//Size=0x1840
你可以看到Level0ToVersionNumber类里面有20个字节的填充。
Level1ToVersionNumber 里面有 8 个字节的填充。
我目前通过以下方式访问这些结构:
g_pArmaMain->BaseObectWorld->Level0PointerToVersionNumber->Level1PointerToVersionNumber->VersionNumber;
如您所见,这是 4 层结构。好吧,我的一些代码有 15 到 20 个结构深。我知道必须有更好的方法来设置它。这不是唯一的方法。
有谁知道如何使用多级指针或其他一些创造性的方式来缩小/合并类?
当我不得不做这样的事情时,这很荒谬:
if( !( g_pArmaMain->BaseObjectWorld->ObjectTablePtr->ObjectTableArrayPtr->ObjectTableArrayElement[i].element->EntityPtr->EntityPlus70->EntityPlus70Plus40->ObjectNamePtr <= 0 ) && !( g_pArmaMain->BaseObjectWorld->ObjectTablePtr->ObjectTableArrayPtr->ObjectTableArrayElement[i].element->EntityPtr->EntityPlus70->EntityPlus70Plus40->ObjectNamePtr->lengthOfEntName <= 0 ) )
它有效,但它只是讨厌讨厌讨厌......
感谢您的帮助。
【问题讨论】:
-
为什么是C++的时候标记为C?
-
因为 asm / c / c++ 都是同一种语言。 c 板上的某个人可能有我的答案
-
汇编程序、C 和 C++ 是三种截然不同的语言。
标签: c++ class subclassing dll-injection