2014-04-24 170 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 

是正確的。祝你好運!