msvcr90d.dll, не найденный в режиме отладки

Quirksmode имел сообщение на этом .

, Так как страница теперь повреждается, и только доступная с помощью archive.org, я воспроизвел ее здесь:

IFrames

На этой странице я даю краткий обзор доступа iframes от страницы they’re на. Не удивительно, существуют некоторые соображения браузера.

iframe является встроенной рамкой, кадр, который, в то время как содержащий абсолютно отдельную страницу с ее собственным URL, тем не менее, помещается в другой странице HTML. Это дает очень хорошие возможности в веб-дизайне. Проблема состоит в том, чтобы получить доступ к iframe, например, для загрузки новой страницы в него. Эта страница объясняет, как сделать это.

Кадр или объект?

фундаментальный вопрос состоит в том, рассматривается ли iframe как кадр или как объект.

  • , Как объяснено на Введение в кадры страницы при использовании кадров браузер создают иерархию кадра для Вас (top.frames[1].frames[2] и такой). iframe вписывается в эту иерархию кадра?
  • Или браузер видит iframe как просто другой объект, объект, который, оказывается, имеет src свойство? В этом случае мы должны использовать стандарт вызов DOM (как document.getElementById('theiframe')) для доступа к нему. В общих браузерах позволяют оба представления о 'реальном' (трудно кодированном) iframes, но к сгенерированному iframes нельзя получить доступ как кадры.

атрибут ИМЕНИ

самое важное правило состоит в том, чтобы дать любой iframe, который Вы создаете name атрибут, даже если Вы также используете id.


Большинству браузеров нужно эти name атрибут для создания iframe части иерархии кадра. Некоторым браузерам (особенно Mozilla) нужно id для создания iframe доступного как объекта. Путем присвоения обоих атрибутов iframe Вы не торопитесь с решением. Но name намного более важно, чем id.

Доступ

Или Вы получаете доступ к iframe как к объекту и изменяете src, или Вы получаете доступ к iframe как к кадру и изменяете location.href.

document.getElementById ('iframe_id') .src = 'newpage.html'; кадры ['iframe_name'] .location.href = 'newpage.html'; синтаксис кадра немного предпочтителен, потому что Opera 6 поддерживает его, но не объектный синтаксис.

Доступ к iframe

Так для полного cross†“опыт браузера необходимо дать iframe имя и использовать

frames['testiframe'].location.href

синтаксис. Насколько я знаю, что это всегда работает.

Доступ к документу

, Получающему доступ к документу в iframe, довольно прост, если Вы используете эти name атрибут. Для подсчета количества ссылок в документе в iframe сделайте frames['testiframe'].document.links.length .

в Сгенерированный iframes

при генерации iframe через W3C DOM iframe сразу не вводят эти frames массив, тем не менее, и frames['testiframe'].location.href, синтаксис не будет работать правильно далеко. Браузеру требуется немного времени, прежде чем iframe поднимется в массиве, время, в течение которого не может работать никакой сценарий.

document.getElementById('testiframe').src синтаксис хорошо работает при всех обстоятельствах.

target атрибут ссылки не работает ни один со сгенерированным iframes, кроме Opera, даже при том, что я дал свой сгенерированный iframe и name и id.

отсутствие [1 120] поддержка означает, что необходимо использовать JavaScript для изменения содержания сгенерированного iframe, но так как Вам нужен JavaScript так или иначе для генерации его во-первых, я не рассматриваю это как большую часть проблемы.

Размер текста в iframes

А любопытный Проводник 6 только ошибка:

при изменении размера текста через меню View размеры текста в iframes правильно изменяются. Однако этот браузер не изменяет разрывы строки в оригинальном тексте, так, чтобы часть текста могла стать невидимой, или разрывы строки могут произойти, в то время как строка могла все еще содержать другое слово.

11
задан Community 23 May 2017 в 11:53
поделиться

7 ответов

Ниже приведен вывод компилятора. Странно, что второй раз запустить сборку удается. Однако я подозреваю, что проблема может быть связана с этой ошибкой при запуске mt.exe, который отвечает за встраивание информации из манифеста в исполняемый файл ...

Generating Code...
link /LIBPATH:"c:\Qt\4.5.2-vc\lib" /NOLOGO /DEBUG /MANIFEST /MANIFESTFILE:"debug\formExtractor.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:debug\formExtractor.exe @.\nmD932.tmp
mt.exe -nologo -manifest "debug\formExtractor.intermediate.manifest" -outputresource:debug\formExtractor.exe;1
'mt.exe' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'mt.exe' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' : return code '0x2'
Stop.
Exited with code 2.

ОБНОВЛЕНИЕ

Причиной действительно была ошибка при запуске mt.exe во время процесса связывания. проблемы. Я добавил путь к Windows SDK ( C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin ) в переменную среды PATH, и теперь я могу запустить исполняемый файл.

Комментарии к различные ответы;


@Shay

Выходной текстовый файл из sxstrace пуст. Понятия не имею, почему. Однако в журнале приложения есть следующая информация:

Faulting application formExtractor.exe, version 0.0.0.0, time stamp 0x4a638ee1, faulting module MSVCR90D.dll, version 6.0.6002.18005, time stamp 0x49e03824, exception code 0xc0000135, fault offset 0x0006f04e, process id 0xf68, application start time 0x01ca08ba801ac5cf.

Версия 6.0.6002.18005?


@ Кирилл В. Лядвинский

Зависимость Уокер находит msvcr90d.dll , используемый файлом qtwebkit4.dll в
c: \ windows \ winsxs \ x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb \ MSVCR90D.DLL

, но не находит (другая версия?), связанная непосредственно файлом msvcr255d.dll . Однако DW, похоже, нигде не показывает свою версию, не так ли?

Конкурс файла formExtractor.intermediate.manifest

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Из файла манифеста похоже, что исполняемый файл связан с другой версией msvcr90d .dll , чем qtwebkit4.dll . Странно то, что обе версии msvcr90d.dll присутствуют в c: а также x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb

Есть идеи?


@ knight666

Я использую платформу Qt, которую я скомпилировал с использованием именно компилятора mism, сейчас нет Вот. Кроме того, Dependency Walker показывает, что отсутствующий файл msvcr90d.dll связан напрямую с исполняемым файлом, поэтому я думаю, это не ошибка какой-либо сторонней библиотеки.

4
ответ дан 3 December 2019 в 03:04
поделиться
  1. You could use Dependency Walker to find out what version of msvcr90d.dll you program tries to find. May be some 3rd-party component linked to some version of msvcr90d.dll which you don't have.
  2. You should check manifest.xml file. Try to remove all unnecessary dependencies.
6
ответ дан 3 December 2019 в 03:04
поделиться

Отказ от ответственности: я не настоящий мастер Win32 :)

Я никогда не использовал Qt Creator, но создает ли он соответствующий манифест для exe?
возможно, манифест предназначен для другой версии (например, SP1), а у вас только RTM-версия.
Вы используете Vista? вы можете попробовать запустить SxsTrace для диагностики параллельных проблем.

3
ответ дан 3 December 2019 в 03:04
поделиться

Возможно, у вас несовпадение версий? У меня было то же самое с Ogre, мне пришлось перекомпилировать SDK, используя последнюю версию сторонней библиотеки для его компиляции.

1
ответ дан 3 December 2019 в 03:04
поделиться

обновление: в моем случае я обнаружил, что vc ++ 2008 express имеет «Использовать обходной путь FAT32» (находится на странице «Инструмент манифеста» свойств конфигурации); это решает проблему. В справочной информации для этого параметра объясняется, что диски / разделы FAT32 имеют 2-секундную задержку в отметке времени, которая мешает правильной работе mt.exe. Кажется, это объясняет несколько случайное поведение проблемы.

3
ответ дан 3 December 2019 в 03:04
поделиться

У меня такая же проблема с msvcr90d.dll, не найденной в vs2008 c ++ express ed. Встроенный манифест в выходном .exe выглядит следующим образом, когда включена добавочная ссылка:



Неудивительно, что не удается найти msvcr90d.dll!

Я пробовал 2 вещи:

A. при использовании шестнадцатеричного редактора приведенное выше будет перезаписано содержимым , найденным в ./Debug/XXX.embed.manifest

B. используйте mt.exe -manifest ./Debug/XXX.embed.manifest -outputresource: ./ Debug / XXX.exe

Оба метода работают. я использовал 2-й метод как команду события после сборки:

mt.exe -verbose -manifest ./$(ConfigurationName)/$(TargetFileName).embed.manifest -outputresource: ./$ (ConfigurationName) / $ ( TargetFileName)

Я не знаю, почему «неправильный» манифест встраивается на 1-е место, когда включена инкрементная ссылка. если кто знает почему, напишите.

Спасибо!

lex

1
ответ дан 3 December 2019 в 03:04
поделиться

Простая установка VS2008 Service Pack 1 решит проблему, если это ошибка, при которой Debug CRT полностью отсутствует в sxs папка.

Это случилось со мной при новой установке VS2008 на 64-битной Windows 7 и решении, содержащем проект VC ++. При загрузке сборки C ++ во время выполнения сборка отладки вылетала из строя с параллельной ошибкой.

В Vista и Win7 (но не в XP) ошибка SxS дает подробную информацию о том, какую сборку он пытался загрузить и не смог загрузить - в данном случае это была VC90.DebugCRT 9.0.22.19. Я проверил (встроенный) манифест для сборки VC и, конечно же, он включил ссылку на эту сборку и версию.

Проверка каталога sxs (% System Drive% \ Windows \ WinSxS) показала, что VC90 DebugCRT не был установлен параллельно! Я установил среду выполнения VC ++, но она не включает среду выполнения отладки. VS2008 предназначен для установки среды выполнения отладки, но ее там не было.

Оказывается, исходный выпуск VS2008 не устанавливает 64-битную версию VC ++ DebugCRT, но устанавливает SP1. Как только я это сделаю, больше никаких исключений времени выполнения и параллельных ошибок.

11
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: