2009-10-08 41 views
24

Có sai khi ghim user32.dll trên Windows 64 bit, từ ứng dụng 64 bit không? Tôi đã làm điều này thành công một số lần và không bao giờ có một lỗi, nhưng nó có vẻ mâu thuẫn. Tôi có nên tìm user64.dll để thay thế không?C# PInvoking user32.dll trên hệ thống 64 bit

Trả lời

30

Tên user32.dll gây hiểu lầm. Đó là phiên bản 64 bit của user32.dll mà bạn đang gọi. Phiên bản 64 bit có tại %windir%\System32\user32.dll.

Phiên bản 32 bit được bao gồm để tương thích với các ứng dụng 32 bit. Nó nằm ở %windir%\SysWOW64\user32.dll. Bạn có thể kiểm tra chúng bằng cách sử dụng tiện ích dumpbin:

System32 \ user32.dll:

FILE HEADER VALUES 
     8664 machine (x64) 

SysWOW64 \ user32.dll:

FILE HEADER VALUES 
     14C machine (x86) 
+0

Bây giờ nó gây hiểu nhầm, nhưng ban đầu nó được đặt tên như vậy để phân biệt giữa 16 và 32 bit phải không? Nhưng họ khó có thể thay đổi tên, điều đó sẽ phá vỡ quá nhiều thứ ... –

+0

Vâng. Tôi nhớ rõ ràng lỗi bảo vệ chung do "USER.EXE" gây ra trong Windows 3.1 trong những ngày thơ ấu của tôi. –

+2

Gotta yêu cách thư mục System32 vẫn được gọi là trong cửa sổ 64 bit :-) – Justin

0

Không có user64.dll vì lý do chính xác cùng bạn chỉ cần mô tả, chương trình .net có thể bất khả tri với kiến ​​trúc CPU nên mã tương tự cần phải làm việc trên x86 và x64.
Nếu bạn đưa chương trình của bạn lên nền tảng x86, nó sẽ vẫn chạy mà không có bất kỳ sửa đổi nào.
Tôi đoán rằng khi họ đặt tên user32.dll họ không có những kịch bản trong tâm trí.

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