2009-03-31 33 views
7

Làm cách nào để phát triển ứng dụng 64 bit trên PC 32 bit?Tôi có thể xây dựng ứng dụng x64 trên máy 32 bit không?

Tôi đang sử dụng VS 2008 trên WinXP 32 bit. Tôi đặt trình liên kết studio trực quan thành/machine: x64 và các cấu hình x64 được tạo. Tất cả sẽ biên dịch và liên kết OK, nhưng khi tôi chạy walker phụ thuộc vào exe tôi thấy 64 bit mscvr90.dll, vv trỏ đến tất cả các dll Win32, Kernel32.dll, Advapi32, Comdlg32, Gdi32, v.v.

Khi tôi sao chép các exe hơn để chạy trên một hệ thống Win64 nó bị từ chối "... cấu hình ứng dụng là không chính xác". Làm thế nào để tôi nói với studio trực quan để tránh xa lĩnh vực 32 bit?

Trả lời

3

Chắc chắn bạn có thể. Thông tin thêm:

+0

Không có liên kết nào trong số này có liên quan đến các vấn đề thời gian chạy bản địa (mscvr90.dll) và áp phích đã có phần biên dịch chéo được sắp xếp? – snemarch

+0

@snemarch, bạn nghĩ rằng anh ta không thiếu một số thành phần 64-bit? –

+0

Như đã lưu ý trong câu trả lời của tôi, tôi nghĩ rằng anh ấy đang thiếu người viết hoa gốc VS2008, không phải CLR :) – snemarch

0

Vấn đề của bạn với "bác bỏ" thực thi có lẽ rằng bạn thiếu một file manifest chính xác, và/hoặc các runtimes vc2008 chưa được (đúng) được cài đặt trên hệ thống. Bạn có thể cần this runtime package (VS2008 native redistributables, phiên bản x64) trên hệ thống đích, nếu không sử dụng cài đặt dựa trên .msi.

Ngay cả trong các cửa sổ 64 bit, các tệp DLL vẫn có tên 32 bit của chúng (trong đó imho là một lựa chọn không tốt vì nó rõ ràng gây nhầm lẫn cho mọi người). Các ứng dụng 32 bit theo mặc định sẽ có% systemroot% \ system32 được chuyển hướng đến% systemroot% \ syswow64 (nơi các tệp 32 bit DLL cư trú), trong khi các ứng dụng 64 bit sẽ không được chuyển hướng. Registry truy cập bởi các ứng dụng 32 bit cũng có một số chuyển hướng liên quan. Cả hai có thể được vô hiệu hóa cho mỗi thread với Wow64DisableWow64FsRedirection(), nhưng rõ ràng là không cho phép các ứng dụng 32bit tải 64bit DLL.

+0

chỉ tò mò, tại sao bạn nghĩ đó là một lựa chọn tồi? Có phải vì khó có thể biết được tệp bạn đang tìm kiếm là 32 hay 64 bit mà không chạy nó hay sử dụng một công cụ để kiểm tra tệp hay tệp khác? – JohnW

+0

John> vâng, đó là một phần lý do. Nắm tay lớn nhất của tôi là với chuyển hướng mặc dù, sẽ có ý nghĩa hơn để có một system64. Sử dụng tên * 32.dll cho các ứng dụng 64bit không may là có một chút ý nghĩa (LoadLibrary + GetProcAddress). – snemarch

0

Vì bạn đang sử dụng VS2008, bạn sẽ phải sao chép gói redist cùng với ứng dụng của bạn vào máy kiểm tra hoặc biên dịch thời gian chạy dưới dạng thư viện tĩnh trong mã của bạn.

Các vấn đề liên quan