2009-07-12 42 views
11

Tôi hỏi vì tôi nhận thấy rằng nhiều liên kết EXE 64 bit liên quan đến những gì dường như là các tệp DLL 32 bit.Liên kết EXE 64 bit có thể chống lại các DLL 32 bit không?

Ví dụ: ứng dụng MFC 64 bit của tôi liên kết với user32.dll, urlmon.dll, wininet.dll - tất cả đều là 32 bit DLL nằm trong windows \ system32. Vì vậy, đây là một số thuật sĩ cụ thể MS áp dụng cho các DLL, hoặc là có khả năng tương thích ngược, như nó đã được, cho EXEs 64 bit mà cần phải sử dụng DLL 32 bit di sản?

+0

Tôi nghĩ chúng ta đã sẵn sàng cho phiên bản tiếp theo của Dependency Walker. Nó xử lý các tập tin thực thi 64 bit theo một cách đôi khi gây nhầm lẫn và hiển thị một số cảnh báo gây phiền nhiễu khác. Đó không phải là lỗi thực sự, nhưng chắc chắn có thể được trình bày tốt hơn. Tôi nghĩ rằng các loại câu hỏi này là +1 cho một phiên bản mới. – eran

+0

@Eran, tôi đã tải xuống phiên bản mới nhất phụ thuộc vào 64 bit và nó hiển thị các tệp DLL phụ thuộc là 64. –

+0

Có một số thuật sĩ - trên Win64 64-bit ntdll.dll được tải vào TẤT CẢ các quy trình, cả 32 bit và 64 -bit. Nhưng không có gì kỳ diệu về bất kỳ DLL nào bạn đã đề cập. –

Trả lời

23

Bạn không thể liên kết các EXE 64 bit tới các tệp DLL 32 bit hoặc ngược lại. Trên hệ điều hành Windows 64 bit, các tệp DLL trong Windows \ System32 thực sự là các tệp DLL 64 bit. Các phiên bản 32 bit có trong Windows \ SysWow64.

+1

Phụ thuộc hiển thị những hình ảnh đó là 32 bit ... làm thế nào đến? –

+6

Nếu "phụ thuộc" là một chương trình 32 bit, thì nhận xét của ssg được phát - lớp WOW chuyển hướng xem ứng dụng 32-bit của hệ thống tệp để họ thấy những gì trong SysWow64 như đang ở trong System32. –

+0

Chà, tôi luôn nghĩ nó theo cách khác. Hấp dẫn. – thebunnyrules

13

Gọi 32 từ 64, Sure It can. (Trong cửa sổ này được gọi là WOW có nghĩa là Windows trên Windows). Nhưng, viceversa Nó không hoạt động.

Ở đây bạn có giải thích về cách:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

Hy vọng nó phục vụ.

+1

Đó là một kỹ thuật hữu ích và nó thực sự nên làm việc theo cả hai hướng, nhưng nó không thực sự "liên kết chống lại". –

+0

Ồ, OK: D Tôi sẽ cần phải tìm hiểu thêm về nó: D – Sheldon

+1

Để chính xác (và tránh thất vọng), nó không thực sự "Gọi 32 từ 64", "giải pháp" được mô tả trong bài viết chỉ tạo ra một đại diện 32 -bit quá trình và sử dụng IPC để chuyển tiếp cuộc gọi đến nó từ một quá trình 64-bit. "Gọi 32 từ 64" trực tiếp là không thể (trong chế độ người dùng) theo như tôi biết. – rustyx

2

Phiên bản mới nhất của Dependency Walker (tìm thấy ở đây: http://www.dependencywalker.com/) khắc phục sự cố này. Nó tìm thấy các DLL chính xác, và tránh các lỗi không chính xác.

(Tôi trễ bữa tiệc, nhưng google vẫn tìm thấy câu hỏi này khi tôi gặp sự cố tương tự.)

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