2015-04-02 94 views
0

嗨那裏我有下面的代碼試圖讓它工作,我不斷獲取類型名稱不允許速度和周圍.x得到期望),基本上我想要做的是閱讀3 「速度」內的D3DXVECTOR3值。我已經提高了結構速度並通過了成員,它不工作,也許我解釋錯了什麼?類型名稱不允許和期望)

struct velocity 
{ 
    float x, y, z; 
}; 

ReadProcessMemory(pHandle, 
        reinterpret_cast<void*>(pPlayerSpeed + 0x000), 
        &speed, 
        sizeof(D3DXVECTOR3), 
        nullptr); 

float speed = sqrt((speed.x * speed.x) + 
        (speed.y * speed.y) + 
        (speed.z * speed.z)); 
+0

spped是由您定義的類型。您尚未聲明任何速度類型的變量。 – Mukit09 2015-04-02 05:02:21

+0

只想說我愛你們這麼多的反饋,這個網站是真棒。 – 2015-04-02 14:06:30

回答

0

首先定義一個struct稱爲speed

struct speed{...}; 

然後嘗試定義float也叫speed

float speed = ...; 

在C++中的變量名是唯一的,所以代碼被拒絕。更改struct的名稱或float的名稱。

0

在該函數調用

ReadProcessMemory(pHandle, 
        reinterpret_cast<void*>(pPlayerSpeed + 0x000), 
        &speed, 
        sizeof(D3DXVECTOR3), 
        nullptr); 

編譯器在表達&speed認爲名稱speed作爲struct speed類型的名稱。你必須指定一個對象(因爲我認爲這種類型)作爲參數,而不是類型名稱本身。

此外,您命名的浮點類型名稱與struct speed的名稱相同,這是一個糟糕的主意。

最好重命名對象或在此聲明中使用結構的詳細名稱。

float speed = sqrt(((struct speed).x * (struct speed).x) + 
        ((struct speed).y * (struct speed).y) + 
        ((struct speed).z * (struct speed).z)); 
0

您似乎不知道類型和這些類型的實例之間的區別。 int,floatspeed,D3DXVECTOR3是類型。通過創建這些類型的實例/變量和操縱這些變量使用類型:

int someInt = 0; 
float someFloatVariable = 0.0; 
speed playerSpeed = { 0.0, 0.0, 0.0 }; 
D3DXVECTOR3 myVect; 

當你通話一個功能,你必須給它是正確的類型,函數期待的實例參數。因此,您撥打ReadProcessMemory在這方面是錯誤的。你可以嘗試這樣的事:

speed playerSpeed; 
ReadProcessMemory(pHandle, 
       reinterpret_cast<void*>(pPlayerSpeed + 0x000), 
       &playerSpeed,  // NOTE variable name, NOT type name 
       sizeof(D3DXVECTOR3), 
       nullptr); 

但是,這也是最有可能錯了,你可能想讀一個D3DXVECTOR3載體,而不是你自己定義的speed實例,所以你可能想嘗試這樣的:

D3DXVECTOR3 playerSpeedVect; 
ReadProcessMemory(pHandle, 
       reinterpret_cast<void*>(pPlayerSpeedVect + 0x000), 
       &playerSpeedVect,  // NOTE variable name, NOT type name 
       sizeof(D3DXVECTOR3), 
       nullptr); 

現在你的代碼第二行:

float speed = sqrt((speed.x * speed.x) + 
       (speed.y * speed.y) + 
       (speed.z * speed.z)); 

所以......你試圖定義一個float類型的命名變速,你不能做b因爲speed命名一個類型。您也嘗試直接訪問struct speed類型的成員,無需實例。爲了訪問成員,你需要一個實例(實例是的東西,它實際上保留了一些內存位置的值,類型只描述了一個實例的樣子以及它可以做什麼)。 所以用你的speed結構可能會做這樣的事情:

speed playerSpeed; 
playerSpeed.x = 1.2; 
playerSpeed.y = 2.0; 
playerSpeed.z = 2.5; 

float computedValue = sqrt(playerSpeed.x * playerSpeed.y + playerSpeed.z); 

現在回到你的代碼,它可能會更好徹底刪除你的速度結構,只是使用D3DXVECTOR3。因此,聲明一個類型爲D3DXVECTOR3的變量,如上所示在ReadProcessMemory的調用中使用它,並使用它的成員來計算所需的值。

+0

嗨@Ionut感謝您的真棒回覆,它真的幫了我很多,但我仍然有點困惑如何使用D3DXVECTOR3 playerSpeedVect中的成員來計算我想要的值。如果它不是太麻煩,請您發佈一個示例代碼? – 2015-04-02 16:24:33

+0

如果'D3DXVECTOR3'是[這裏](https://msdn.microsoft.com/en-us/library/windows/desktop/bb205546(v = vs.85).aspx),那麼它看起來非常類似你試圖定義的'struct'和你使用的完全相同:'sqrt(playerSpeedVect.x * playerSpeedVect.y + playerSpeedVect.z)'其中'playerSpeedVect'是一個類型爲'D3DXVECTOR3'的變量。 – Ionut 2015-04-02 17:37:42

+0

另一方面,在進入諸如DirectX或'ReadProcessMemory()'之類的東西之前,你應該花時間學習C++的語法和概念。 – Ionut 2015-04-02 17:41:26

相關問題