您似乎不知道類型和這些類型的實例之間的區別。 int
,float
,speed
,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
的調用中使用它,並使用它的成員來計算所需的值。
spped是由您定義的類型。您尚未聲明任何速度類型的變量。 – Mukit09 2015-04-02 05:02:21
只想說我愛你們這麼多的反饋,這個網站是真棒。 – 2015-04-02 14:06:30