2012-10-23 68 views
10

Tôi đã tạo một dự án 64bit C++ trong Visual Studio 2010 (trong Windows 7 64bit);Chương trình 64bit vC++ dường như chạy dưới chế độ 32bit

Tôi nghĩ rằng tôi đã chạy một ứng dụng 64bit, và đoạn mã sau trở đúng:

bool is64bit = (sizeof(void*)==8); 

nhưng nếu tôi gọi là chức năng IsWow64Process, nó trở FALSE ...

More những điều kỳ lạ:

  • gọi LoadLibrary() để tải một dll dưới c:\windows\system32\some.dll hoạt động tốt
  • tải một dll dưới c:\windows\sysWow64\some.dll sẽ thất bại (mã lỗi 193: some.dll không phải là một ứng dụng win32 hợp lệ)

Tất cả những thất bại cho thấy các ứng dụng đang chạy dưới chế độ 32bit, nhưng đây là đối với sự thật, loại con trỏ là chiều dài 8 byte

Tôi bối rối, mọi trợ giúp sẽ được đánh giá cao!

Trả lời

11

gọi hàm LoadLibrary() để tải dll trong c: \ windows \ system32 \ some.dll hoạt động tốt; tải một dll theo c: \ windows \ sysWow64 \ some.dll sẽ không thành công

Mọi thứ bạn cho rằng bạn đang chạy 64 bit.

Trong Windows 64bit, các thư mục chứa các System32phiên bản 64 bit của DLL, và thư mục SysWow64 chứa các phiên bản 32 bit . Khi IsWow64Process trả về TRUE, điều đó có nghĩa là bạn là ứng dụng 32 bit trên hệ điều hành 64 bit.

Điều này trái ngược với những gì các tên trong thư mục gợi ý, đó có thể là lý do tại sao điều này có vẻ khó hiểu. Về cơ bản, thư mục SysWow64 là phiên bản 32 bit để sử dụng theo WoW64, là "Windows 32 bit trên Windows 64 bit" - về cơ bản, bạn sử dụng các DLL WoW64 khi chạy 32bit và các tệp DLL thông thường khi bạn chạy 64bit.

+0

+1 Mọi thứ mà OP mô tả phù hợp 100% với ứng dụng 64 bit trên hệ điều hành 64 bit. –

+0

@DavidSchwartz Yeah - mọi người bị lẫn lộn vì sử dụng WoW64 có nghĩa là bạn đang chạy 32 bit, điều ngược lại với những gì bạn nghĩ là đã đặt tên;) –

+0

Câu trả lời hay. Nhận ra sự khác biệt giữa WoW64 và system32 đã cho tôi một số thời gian trước đau đầu rắn. – nothrow

3

Bấm Ctrl-Shitf-Esc để chạy ứng dụng Trình quản lý tác vụ. Trong tab "Quy trình", bạn sẽ thấy nhãn *32 theo tên của mọi quy trình 32 bit. Đây là một trong những cách đơn giản nhất để kiểm tra độ bit của quy trình.

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