Aracılığıyla paylaş


IDiaImageData

Modülün veya görüntünün temel konumunun ve bellek uzaklıklarının ayrıntılarını kullanıma sunar.

Sözdizimi

IDiaImageData : IUnknown

Vtable Sırasına Göre Yöntemler

Aşağıdaki tabloda yönteminin yöntemleri gösterilmektedir IDiaImageData.

Metot Açıklama
IDiaImageData::get_relativeVirtualAddress Modülün uygulamaya göre sanal belleğindeki konumu alır.
IDiaImageData::get_virtualAddress Görüntünün sanal belleğindeki konumu alır.
IDiaImageData::get_imageBase Görüntünün temel alınması gereken bellek konumunu alır.

Açıklamalar

Bazı hata ayıklama akışları (XDATA, PDATA) görüntüde depolanan verilerin kopyalarını içerir. Bu akış veri nesneleri arabirim için IDiaImageData sorgulanabilir. Ayrıntılar için bu konudaki "Arayanlar için Notlar" bölümüne bakın.

Arayanlar İçin Notlar

Bir IDiaEnumDebugStreamData nesnesi üzerinde çağırarak QueryInterface bu arabirimi alın. Tüm hata ayıklama akışlarının arabirimi desteklemediğini IDiaImageData unutmayın. Örneğin, şu anda arabirimi yalnızca XDATA ve PDATA akışları destekler IDiaImageData .

Örnek

Bu örnek, tüm hata ayıklama akışlarında arabirimi destekleyen IDiaImageData herhangi bir akışı arar. Böyle bir akış bulunursa, bu akışla ilgili bazı bilgiler görüntülenir.

void ShowImageData(IDiaSession *pSession)
{
    if (pSession != NULL)
    {
        CComPtr<IDiaEnumDebugStreams> pStreamsList;
        HRESULT hr;

        hr = pSession->getEnumDebugStreams(&pStreamsList);
        if (SUCCEEDED(hr))
        {
            LONG numStreams = 0;
            hr = pStreamsList->get_Count(&numStreams);
            if (SUCCEEDED(hr))
            {
                ULONG fetched = 0;
                for (LONG i = 0; i < numStreams; i++)
                {
                    CComPtr<IDiaEnumDebugStreamData> pStream;
                    hr = pStreamsList->Next(1,&pStream,&fetched);
                    if (fetched == 1)
                    {
                        CComPtr<IDiaImageData> pImageData;
                        hr = pStream->QueryInterface(__uuidof(IDiaImageData),
                                                     (void **)&pImageData);
                        if (SUCCEEDED(hr))
                        {
                            CComBSTR name;
                            hr = pStream->get_name(&name);
                            if (SUCCEEDED(hr))
                            {
                                wprintf(L"Stream %s:\n",(BSTR)name);
                            }
                            else
                            {
                                wprintf(L"Failed to get name of stream\n");
                            }

                            ULONGLONG imageBase = 0;
                            if (pImageData->get_imageBase(&imageBase) == S_OK)
                            {
                                wprintf(L"  image base = 0x%0I64x\n",imageBase);
                            }

                            DWORD relVA = 0;
                            if (pImageData->get_relativeVirtualAddress(&relVA) == S_OK)
                            {
                                wprintf(L"  relative virtual address = 0x%08lx\n",relVA);
                            }

                            ULONGLONG va = 0;
                            if (pImageData->get_virtualAddress(&va) == S_OK)
                            {
                                wprintf(L"  virtual address = 0x%0I64x\n", va);
                            }
                        }
                    }
                }
            }
        }
    }
}

Gereksinimler

Üst bilgi: Dia2.h

Kitaplık: diaguids.lib

DLL: msdia80.dll

Ayrıca bkz.