簡體   English   中英

通過指針訪問結構成員

[英]Accessing struct members by a pointer

我有一個多實例對話框,其HWND和DC包含在結構向量中。 在調用CreateWindowEx()之前,我為該結構的新實例分配了內存,並將其指針傳遞給WndProc(使用lpParam )。

在WndProc內部,我有以下代碼:

HexParams Hex;
HexParams *pHex;
if (uMsg == WM_NCCREATE) {
    SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR) ((CREATESTRUCT *)lParam)->lpCreateParams);
    return TRUE;
} else {
    LONG_PTR lpUserData = GetWindowLongPtr(hDlg, GWLP_USERDATA);
    if (lpUserData) {
        pHex = (HexParams *)lpUserData;
        Hex = *pHex;
    } else
        return DefWindowProc(hDlg, uMsg, wParam, lParam);
}

然后在整個WndProc中,我一直在使用Hex.Member來訪問其memebr,對其進行讀取並對其進行寫入(如果是在單個實例且該結構為全局結構時遺留下來的)。 因此,當我添加多實例支持時,我希望簡單地取消引用指針就可以使我從該向量獲得struct memebres。

但是,以下示例做了不同的事情:

Hex.DC = GetDC(hDlg);
pHex->DC = GetDC(hDlg);

盡管執行了Hex = *pHex; 在它之前。 pHex->DC寫入我的向量元素,但是Hex.DC寫入我無法弄清楚的地方。 有沒有辦法在代碼中保留Hex.Member用法,或者我必須將它們全部轉換為pHex->Member

我可能是“缺少指針的要點”,但是在這里我無法獲得如何正確使用它們的信息。

Hex是在該函數中定義的變量。 在此函數調用的堆棧上,寫入Hex.DC將引用該結構內的4個字節。

pHex指向呼叫者確定的某個地方。 Hex = *pHex; 會將到達的結構的內容復制到您的本地結構。 它們是不同的內存塊。

繪制堆棧的圖片,遮擋呼叫的激活幀,然后在其中填充十六進制。 繪制其他分配了內存的塊(全局,動態,早期調用),並向其繪制箭頭以指示指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM