【问题标题】:C Structure holding a pointer to another structure how access member of that inner structure pointerC结构持有指向另一个结构的指针如何访问该内部结构指针的成员
【发布时间】:2014-06-09 03:16:13
【问题描述】:

结构是这样的

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 个都给我编译器问题。

也许我不得不在struct PLAYER 中使用*LPPROCESS_INFORMATION,或者我不得不使用struct _PROCESS_INFORMATION *,因为我真的很讨厌使用typedef 的

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

编辑:似乎我发现了我使用愚蠢的typedef 的问题,难怪我有这么多问题。这些typedef 消除了对在这种情况下是struct 的类型的使用,所以我的结构搞砸了..

修复是替换

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

与

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

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

player->ProcessInformation->hProcess

是这样吗?

【问题讨论】:

  • TerminateProcess() 的函数原型有助于找到答案。 TerminateProcess() 的参数类型是什么? TerminateProcess() 是您代码的一部分,还是由库提供?
  • 我现在发了,是windows.h发来的

标签: c pointers data-structures struct structure


【解决方案1】:
player->ProcessInformation->hProcess 

是正确的。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2015-01-24
    • 2017-07-13
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多