Есть ли настоящая 64-разрядная версия msvcr80.dll?Если нет, то почему? - PullRequest
4 голосов
/ 02 июля 2011

Я прочитал ссылку , которая отвечает на вопрос, существует ли 64-разрядная версия Visual Studios ( 64-разрядная версия Visual Studio? ). Простой ответ - Нет , но 32-разрядная среда разработки Visual Studio может создавать 64-разрядные исполняемые файлы.

Вопросы :

1) Существует ли 64-разрядная версия распространяемой библиотеки Microsoft msvcr80.dll ? Я установил распространяемый пакет на свою 64-разрядную машину Windows 7, и все копии (всего 7), найденные в подкаталоге winsxs, указывают в своих заголовочных разделах , что они являются 32-разрядными.

2) Не правда ли, что:

a) 32-битные исполняемые файлы не могут загрузить 64-битную DLL?

b) 64-битные исполняемые файлы не могут загрузить 32-битную DLL?

в) если это правда, что все версии msvcr80.dll истинны) 32-разрядные, как указано в разделах заголовка каждого, как 64-разрядное приложение, созданное с помощью Visual Studio, может использовать любую из функциональных возможностей этого распространяемым?

Если кто-то нашел истинную 64-разрядную версию этого файла (msvcr80.dll), то есть ту, в которой в заголовочном разделе фактически указывается, что это 64-разрядная библиотека, укажите мне ссылку.

Новое: Добавлено изображение BeyondCompare Viewer для отображения содержимого раздела заголовка msvcr80.dll, указывающего, что dll предназначена для 32-битного использования ...

Ответы [ 3 ]

6 голосов
/ 02 июля 2011

Beyond Compare не использует PE-заголовки для отображения - он использует ресурсы версии, а ресурс FILEOS для x64 msvcr80.dll имеет значение VOS_NT_WINDOWS32 (насколько я знаю, нетt a VOS_NT_WINDOWS64).

Используйте dumpbin /headers (или link /dump /headers), чтобы получить информацию о заголовках PE.Вы увидите, что библиотеки x64 имеют следующую информацию:

FILE HEADER VALUES
            8664 machine (x64)
4 голосов
/ 02 июля 2011

Я хотел бы отметить, что msvcr80.dll - это среда выполнения crt для Visual Studio 2005, а не Visual Studio 2010, как указано вашим тегом.

DLL в winsxs amd64_xxx - это Win64 DLL.Вот дампбин dll в моей системе:

C:\Windows\winsxs\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1833_none_88de3f632fb047bc>dumpbin /headers msvcr80.dll Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file msvcr80.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
            8664 machine (x64)
               6 number of sections
        482BAB54 time date stamp Thu May 15 15:17:40 2008
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
            2022 characteristics
                   Executable
                   Application can handle large (>2GB) addresses
                   DLL

Вот дампбин 32-битной версии:

C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1833_none_d08b763a442c70c2>dumpbin /headers msvcr80.dll
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file msvcr80.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)
               5 number of sections
        482BB294 time date stamp Thu May 15 15:48:36 2008
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2102 characteristics
                   Executable
                   32 bit word machine
                   DLL

И для ответа на 2)

32-битные приложения не могут загружать 64-битные DLL, а 64-битные приложения не могут загружать 32dll.

Подробнее см. Взаимодействие 64-битных процессов MSDN .

1 голос
/ 02 июля 2011
  1. 64-разрядная версия Visual Studio пока отсутствует, все VS являются 32-разрядными.
  2. VS может создавать и отлаживать 64-разрядные исполняемые файлы.
  3. Если ваша ОС 64-битная, это НЕ означает, что для запуска приложений вам нужна 64-битная среда VC.Если приложение 32-разрядное, вам нужно 32-разрядное время выполнения, а не 64-разрядное время выполнения.Если приложение 64-битное, да, определенно вам нужна 64-битная среда выполнения VC.
  4. Среда выполнения VC должна соответствовать версии, которую вы использовали для создания двоичных файлов (VC8, VC9 или VC10).И он также должен соответствовать пакету обновления.
  5. 32-разрядные двоичные файлы имеют 4-байтовую адресацию, и поэтому 32-разрядный процесс не может загрузить 64-разрядную DLL.Это происходит и в обратном направлении.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...