2013-05-16 11 views
0

Как сделать DIA освободить свою блокировку в файле pdb?Как я могу сделать DIA для его блокировки в файле pdb?

Я загружаю pdb и создаю сеанс, как показано ниже, и все работает отлично, я могу использовать сеанс для получения данных из pdb.

Когда я закончил с pdb, я освобожу сессию и DiaSource, но DIA все еще имеет блокировку в файле pdb, я не могу удалить файл pdb в проводнике, пока мое приложение не выйдет. Как сообщить DIA о блокировке файла pdb?

CoCreateInstance(__uuidof(DiaSource), 
    NULL, 
    CLSCTX_INPROC_SERVER, 
    __uuidof(IDiaDataSource), 
    (void**)&mp_DiaSource); 

mp_DiaSource->loadAndValidateDataFromPdb(
    (LPCOLESTR)p_wide_filename, &m_Sig, 0, m_Age); 

mp_DiaSource->openSession(&mp_Session); 

// do stuff with mp_Session here 

mp_Session->Release(); 

mp_DiaSource->Release(); 

большое спасибо.

Стюарт.

ответ

1

по крайней мере msdia90.dll, это правда, что дескриптор файла не закрывается после выпуска(), возможный обходной путь есть, позвонить loadDataFromIStream() и пройти IStream вместо пути, чтобы загрузить PDB файл, однако, я никогда не испытываю ли это действительно работает.

+0

Да, вы правы. Использование 'IStream' помогает избежать блокировки файла pdb. Я использовал этот код для себя: 'IStream * pdbFileStream; SHCreateStreamOnFileEx ("filename", STGM_FAILIFTHERE, GENERIC_READ, false, nullptr, & pdbFileStream); ' –