Trong dự án của chúng tôi, chúng tôi đang tái sử dụng rất nhiều mã Delphi thông qua COM trong ứng dụng asp.net của chúng tôi.Tại sao COM interop được ưu tiên hơn P/Gọi trong .NET?
Như thế này: di sản delphi dll => delphi COM wrapper => Net interop => asp.net (MVC)
Chúng tôi có một số vấn đề liên quan đến vi phạm truy cập, dỡ của dll, vv ... Tôi có bây giờ đã chuyển một số để sử dụng dll kế thừa trực tiếp thông qua mã P/Invoke.
Khi tôi xem các tài nguyên liên quan đến COM và P/Invoke, mọi người hầu như luôn luôn tư vấn để sử dụng COM. Tại sao vậy? Không P/Invoke có những lợi ích sau:
- kiểm tra ra mã sẽ luôn luôn sử dụng dll đúng thay vì COM đăng ký cuối cùng
- Nhiều phiên bản có thể chạy song song trên các máy chủ (ví dụ : DEV, TEST và QA)
- Không còn COM đăng ký rắc rối
- nhanh hơn chức năng giao tiếp COM (bài báo tôi đọc thấy một sự gia tăng tốc độ 30%)
bạn có thể p/gọi vào dll 32 bit từ quy trình 64 bit không? Tôi không nghĩ vậy. – Bond
Bạn có thể đưa ra một số tài liệu tham khảo đề xuất COM được ưa thích hơn với P/Invoke không? Tôi rất đồng ý với bạn rằng P/Invoke là giải pháp tốt hơn nếu có. Hầu hết các internals trong .NET BCL được thực hiện theo P/Invoke đến các API Win32. Chỉ có lý do để sử dụng COM interop là nơi bạn không có lựa chọn, ví dụ: interop với các ứng dụng Office hoặc các phần Windows API chỉ có COM. – Govert
Hãy nhớ địa ngục DLL? Thay vì sử dụng dll chính xác, mã của bạn sẽ sử dụng dll có sẵn đầu tiên có cùng tên. Bất kỳ thay đổi API nào sẽ không được phát hiện cho đến khi thời gian chạy, điều đó có nghĩa là việc phiên bản là tất cả nhưng không thể. Bạn không thể tạo một DLL sẽ phục vụ cả khách hàng cũ và mới hơn mà không thay đổi tên của các hàm mình –