COM / OLE, старый код и головные боли

Сейчас я живу в 90-х, и мне передали этот кусок устаревшего кода. Я не разбираюсь в COM / OLE / MFC / ATL, поэтому я спрашиваю об этом, надеясь, что кто-то с опытом того времени может помочь мне отследить эту проблему.

  • У меня есть действительно старое / устаревшее приложение MFC / ATL.
  • Он запускается, но в конечном итоге дает сбой в CFormView :: HandleInitDialog (atlmfc \ src \ mfc \ viewform.cpp)

Я получаю следующие результаты отладки:

CoCreateInstance of OLE control {6A24B340-7634-11D3-A5B0-0050044A7E1A} failed.
>>> Result code: 0x80040154
>>> Is the control is properly registered?

Я знаю, что это связано с ошибкой регистрации какого-либо компонента или разрешением, но я не знаю, как определить, что это за зависимость, у меня есть старый рабочий исполняемый файл кода, и, возможно, я мог бы использовать немного обратное проектирование, чтобы выяснить, отсутствуют ли какие-либо библиотеки DLL, но я действительно не знаю, я знаю, что такое OLE, и был бы очень признателен за помощь в том, как это отладить.


person John Leidegren    schedule 05.12.2011    source источник
comment
Чтобы помочь любому, кто сталкивается с подобной проблемой, у меня случился такой сбой, и я щелкнул ocx, который выгружался, и открылся обходчик зависимостей. Он показал, что ocx не смог открыть определенную dll, и, когда я поместил ее по правильному пути, программа работала без сбоев.   -  person Nav    schedule 22.03.2012


Ответы (1)


похоже, что это dxDBGrid.dll. OLE - это просто связывание и встраивание объектов. Вам нужно найти dxDBGrid.dll и убедиться, что он зарегистрирован. вы можете использовать regsvr32 для его регистрации.

объяснение regsvr32

person John Sobolewski    schedule 05.12.2011
comment
Может быть, его антивирус тоже заблокирует. - person Hans Passant; 05.12.2011
comment
вы можете выполнить поиск в реестре ... если файл загружается с пути к файлу, который жестко закодирован, файл может быть не там, где вы его ожидаете ... (например, программные файлы против программных файлов (x86)) - person John Sobolewski; 05.12.2011
comment
Это вполне может быть так, но знаете ли вы, что это dxDBGrid, а не какой-либо другой компонент, среди всех DLL, которые у меня есть, я хотел бы знать, какие из них содержат. Как я уже сказал, это устаревший код, я еще не все полностью понимаю ... разве они не каким-то образом выясняют, какие GUID содержатся в конкретной DLL? - person John Leidegren; 05.12.2011
comment
microsoft.com/download/en/ - это ссылка на oleview, которая должна позволить вам заглянуть внутрь. - person John Sobolewski; 06.12.2011
comment
Также предполагается, что идентификатор GUID, связанный с компонентом com, является уникальным. Итак, я поискал guid в Google, чтобы узнать, какой компонент имеет этот clsid, и вот что получилось. Так что я достаточно уверен. - person John Sobolewski; 06.12.2011
comment
OLE Viewer действительно старый, и в нем также отсутствуют некоторые компоненты, но, похоже, он работает, инструмент немного странный, но я думаю, что это был тот ответ, который искал. - person John Leidegren; 06.12.2011