2011-11-19 23 views
5

Câu hỏi ngắn: có thể (trên hệ điều hành x64) không? Nếu không, tại sao chính xác?Gọi hội đồng x64 qua COM từ Ứng dụng 32 bit

Tôi đã phát triển một dll plugin C# cho excel 32.

Khi được biên dịch trong x86, nó hoạt động tốt.

Khi được biên dịch trong x64, lệnh gọi COM không thành công.

Tôi có cần phiên bản excel 64 bit không? Tôi nghĩ COM là bất khả tri của việc biên dịch kiến ​​trúc và có khả năng giao tiếp giữa các dll được phát triển trong các công nghệ khác nhau và có các kiến ​​trúc khác nhau, nhưng tôi đoán điều này là sai.

Tôi đoán một dll bit x64 rõ ràng có thể không được gọi qua COM (hoặc người nào khác) từ ứng dụng 32 bit.

+0

Bạn có thể cần hệ thống 64 bit (ít nhất là hạt nhân) để chạy mã 64 bit. –

+0

@BasileStarynkevitch Có tất nhiên. Tôi đã thêm độ chính xác vào bài đăng –

+0

Bạn đã thử biên dịch cho AnyCPU chưa? – Filburt

Trả lời

9

COM hỗ trợ hai loại máy chủ, trong quá trình và ngoài quy trình. Tiện ích mở rộng văn phòng là các thành phần trong quá trình, một DLL được tải vào quy trình. Một quy tắc cứng cho các quy trình 32 bit là chúng không thể tải các tệp DLL 64 bit. Và cách khác xung quanh. Điều này được thực thi bởi bản thân registry, một quá trình 32-bit không thể truy cập trực tiếp vào thông tin đăng ký cho các máy chủ COM 64-bit. Chúng được chuyển hướng đến các khóa HKLM/Software/Wow6432Node. Hay nói cách khác, họ thậm chí không thể xem thành phần của sai bit.

Thành phần ngoài quá trình không có hạn chế đó, chúng chạy trong quá trình của riêng chúng. COM so sánh các cuộc gọi giữa hai quy trình bằng RPC và các giấy tờ về sự khác biệt bit. Đây cũng là một cách để có được một máy chủ 64-bit trong quá trình làm việc với một máy chủ 32-bit, bạn có thể chạy các thành phần trong một quá trình thay thế. Đây là khó khăn để có được đi và hầu như không có giá trị phức tạp, quá trình gọi là nhiều hơn đắt hơn so với các cuộc gọi trong quá trình do marshaling yêu cầu và bối cảnh chuyển đổi. Không chỉ đắt hơn một chút, nó còn chậm hơn khoảng 10.000 lần, chủ yếu là do một cuộc gọi chức năng trong quá trình rất nhanh. Nó chỉ được sử dụng để giữ một máy chủ 32 bit cũ hoạt động với một chương trình 64 bit. Nhìn vào COM + lưu trữ nếu bạn muốn thử này, tôi không biết nhiều về nó.

+0

Cảm ơn bạn rất nhiều, đồng nghiệp. Đây chính là loại xác nhận sạch mà tôi đang tìm kiếm. Và độ chính xác của bạn liên quan đến các cuộc gọi quá trình được đắt hơn rất nhiều là rất quý giá đối với chúng tôi, nó phụ tùng chúng tôi thời gian cố gắng để làm điều đó với kết quả hiệu suất khủng khiếp. Vì vậy, nếu tôi thực sự muốn dính vào x64 Framework của tôi, tôi đoán cần phân phối x64 của Excel. –

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