2013-10-23 34 views
1

我正在嘗試使用指針從函數獲取多個輸出。我傳入一個指針(爲了初始目的指向NULL),並且該函數填充所述指針並返回其失敗/成功值。使用指針獲取函數的多個輸出C++

在指針傳入的函數內部,一切都很好。它被初始化。然而,一旦我們離開了,舊的價值就會被拋棄,而且它會再次變爲空。

我有一種感覺,我在這裏應該使用正確數量的星號和&符號,但我並不完全明白。

強制性代碼:

ID3D11Buffer* Vout; 
g_pDxManager->CreateVertexbuffer(&Vout, vertexes); //This isn't getting changed 

內CreateVertexBuffer()

HRESULT DxManager::CreateVertexbuffer(ID3D11Buffer** out, Vertex3p vertexes []) 
{ 
    D3D11_BUFFER_DESC bufferDesc; 
    bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
    bufferDesc.ByteWidth = (sizeof (Vertex3p1c) * 3); 
    bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; 
    bufferDesc.MiscFlags = 0; 
    bufferDesc.Usage = D3D11_USAGE_DYNAMIC; 

    D3D11_SUBRESOURCE_DATA initData; 
    initData.pSysMem = vertexes; 
    initData.SysMemPitch = 0; 
    initData.SysMemSlicePitch = 0; 

    HRESULT hr = m_pDxDevice->CreateBuffer(&bufferDesc, &initData, (ID3D11Buffer**) &out); 
    if (hr == S_OK) g_pLogger->log("DxManager::CreateVertexbuffer(): Successful.", 1, false, false); 

    return hr; 
} 
+0

小心石膏:你可以騙編譯器,但他會報復。 – Drop

+0

'(ID3D11Buffer **)&out'看起來不對。你爲什麼要演員?嘗試直接傳遞'out'。 –

回答

4
HRESULT hr = m_pDxDevice->CreateBuffer(&bufferDesc, &initData, (ID3D11Buffer**) &out); 

最後一個參數應該只是out:沒有符號,也沒有投。

即上面一行應該是:

HRESULT hr = m_pDxDevice->CreateBuffer(&bufferDesc, &initData, out);