2011-07-01 29 views
4

我已閱讀鏈接回答是否有64位版本的視覺工作室(Visual Studio 64 bit?)的問題。簡單的答案是,但32位Visual Studio開發環境可以生成64位可執行文件。是否有真正的64位版本的msvcr80.dll?如果不是,爲什麼不呢?

問題

1)是否有微軟的可再發行庫MSVCR80.DLL的64位版本?我在我的Windows 7,64位機器上安裝了可再發行組件包,winsxs子目錄中找到的所有副本(共7個)在其標題部分中指示它們是32位。

2)是不是真的是:

一個)32位的可執行文件不能加載一個64位的dll?

b)64位可執行文件無法加載32位dll?

c)如果所有版本的msvcr80.dll都是真的,則爲32位,如每個標題部分所示,使用Visual Studio構建的64位應用程序如何使用以下任何功能這個可再分配?

如果有人發現此文件(msvcr80.dll)的真實64位版本,即其中的標題部分實際上聲明它是64位庫的,請將該鏈接指向我。

New: Added image of BeyondCompare Viewer to show contents of msvcr80.dll header section, indicating dll is targeted for 32 bit use...

+0

在此處關閉循環 - 發佈此消息後不久,我發現MS可再發行版的64位版本是_msvcr100.dll_,並且包含在最近版本的Microsoft SDK下載中。 – ryyker

+0

否....「msvcr80.dll」是Visual Studio 2005的(發行版)運行時,WinSxS目錄中應該有32位。我不知道2005年是否有64位版本,但如果是,它會在系統目錄中。 「msvcr100.dll」是Visual Studio 2010的(發行版)運行時,它也應該在WinSxS中有32位,在系統目錄中有64位。 –

+0

@MooingDuck - 不知道你的評論中引用了什麼「不....」。我已經使用msvcr100.dll,並從可下載的Microsoft Windows 7 SDK中獲得。我同意它與Visual Studios等開發環境一起分發,但也可以在SDK中使用。 (我在大約一個小時前編輯過這篇文章,只是指出在沒有完整的MS Visual Studios的情況下,人們可以在哪裏得到64位msvcrxxx.dll) – ryyker

回答

6

超越比較不使用PE頭爲它的展示 - 它使用版本的資源,併爲64 MSVCR80.DLL的FILEOS版本資源具有值VOS_NT_WINDOWS32(據我所知沒有一個VOS_NT_WINDOWS64 )。

使用dumpbin /headers(或link /dump /headers)可以獲取有關PE標題的信息。你會看到,64位的DLL有如下信息:

FILE HEADER VALUES 
      8664 machine (x64) 
4

我想指出的是,MSVCR80.DLL是Visual Studio 2005中,沒有Visual Studio 2010中您的代碼所表示的CRT運行。

winsxs amd64_xxx中的DLL是win64 dll。這裏是DLL的我的系統上DUMPBIN:

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位版本的一個DUMPBIN:

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位應用程序無法加載32位的DLL。

有關詳細信息,請參閱MSDN 64bit Process Interoperability

1
  1. 有Visual Studio中的沒有64位版本的是,所有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。它也適用於其他方式。
相關問題