2014-04-24 126 views
0

结构看起来像这样C语言结构保持一个指针到另一个结构访问该内部结构指针

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; // [email protected] 

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

PLAYER struct pointer的其他成员->工作,但如果struct PLAYER里面的成员是指向另一个结构,然后我得到的编译器的问题箭头。

以上所有3个给我的编译器问题。

也许我不得不使用*LPPROCESS_INFORMATIONstruct PLAYER里面也许我不得不使用struct _PROCESS_INFORMATION *,因为我真的很讨厌用typedef

(是的,我只是用Java/C#用C仅一个星期前,我通常代码开始/VB.NET所以这是我的全部新)

编辑:看来我发现我是用一个愚蠢的typedef难怪我有问题,这么多的问题..这些类型定义的消除对类型使用这这种情况是一个struct所以我的结构非常搞砸..

修复是更换

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

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

现在我可以用beautifiul箭头不停

player->ProcessInformation->hProcess 

这是正确的?

+0

TerminateProcess()的函数原型将有助于提出答案。 TerminateProcess()的参数的类型是什么? TerminateProcess()是你的代码的一部分,还是由库提供的? –

+0

我现在发布了它,它是'windows.h'中的一个 – user3435580

回答

0
player->ProcessInformation->hProcess 

是正确的。祝你好运!