C结构持有指向另一个结构的指针如何访问该内部结构指针的成员

时间:2014-04-24 02:25:38

标签: c pointers data-structures struct structure

结构看起来像这样

typedef struct _PROCESS_INFORMATION {
  HANDLE hProcess;
  HANDLE hThread;
  DWORD  dwProcessId;
  DWORD  dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;


struct PLAYER
{
  /* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
  /* 0x4/4 */ unsigned long dword4;
  /* 0x8/8 */ unsigned long dword8;
  /* 0xC/12 */ unsigned long dwordC;
  //... Lots of fields here
}

以下是TerminateProcess

的原型
BOOL WINAPI TerminateProcess(
  _In_  HANDLE hProcess,
  _In_  UINT uExitCode
);

我尝试了下面的所有3个并且失败了。

unsigned int v102; //exit code.
struct PLAYER *player; // eax@9

TerminateProcess(player->ProcessInformation->hProcess, v102);
TerminateProcess(player->ProcessInformation.hProcess, v102);
TerminateProcess(*(player->ProcessInformation)->hProcess, v102);

箭头->适用于PLAYER struct pointer的其他成员,但如果struct PLAYER中的成员是指向另一个结构的指针,那么我会遇到编译器问题。

以上所有3都给我编译问题。

也许我必须在*LPPROCESS_INFORMATION内使用struct PLAYER,或者我必须使用struct _PROCESS_INFORMATION *因为我真的讨厌使用typedef&#39>

(是的,我刚开始使用C一周前,我通常用Java / C#/ VB.NET编写代码,所以这对我来说都是新手。)

编辑:似乎我发现了问题我使用了一个愚蠢的typedef难怪我遇到了这么多问题。那些typedef消除了一种类型的用途,在这种情况下是一种struct所以我的结构非常糟糕......

修复是替换

/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;

/* 0x0/0 */ struct _PROCESS_INFORMATION *ProcessInformation;

现在我可以不停地使用美化箭头

player->ProcessInformation->hProcess

这是对的吗?

1 个答案:

答案 0 :(得分:0)

player->ProcessInformation->hProcess 

是对的。祝你好运!