2010-03-10 38 views
5

Có phải System.Runtime.InteropServices.COMException của 0x80040154 luôn có nghĩa là lớp đó không được đăng ký? Tôi nhận được một COMException mà nói "Lấy nhà máy lớp COM cho các thành phần với CLSID {29131539-2EED-1069-BF5D-00DD011186B7} không thành công do lỗi sau: 80040154." Nó đang cố gắng để tải Interop.Domino.dll đó là một tài liệu tham khảo tôi nhận được từ tab COM của Add Reference gọi là "Lotus Domino Objects" trỏ đến domobj.tlb trong thư mục chương trình Notes.Là một COMException của 0x80040154 luôn luôn 'Lớp không được đăng ký'?

Tôi đã viết mã năm trước - đó là điều duy nhất tôi từng làm với interop và thật công bằng khi nói rằng tôi chưa bao giờ thực sự hiểu thấu nó.

Tôi gặp lỗi này một lần nữa sau khi di chuyển mã sang máy chủ R2 2008 (vì vậy, x64). Nó được viết trên XP và chạy vào năm 2003 (cả x86). Để chẩn đoán sự cố, tôi đã tạo một hộp Win7 x86 (vì không có R2 x86) và nó hoạt động. Tôi cũng xây dựng một hộp x64 năm 2003 và nó không thành công với cùng một lỗi, do đó, có vẻ như nó được gây ra bằng cách di chuyển đến kiến ​​trúc x64. Có một cái gì đó tôi nên làm gì khi làm interop để có được DLL X86 COM để làm việc trên máy x64?

Trả lời

2

Chú ý đến việc đăng ký các thành phần 32 bit bằng cách sử dụng thanh ghi chính xác (C: \ Windows \ SysWOW64 \ regsvr32.exe).
Nếu bạn đã đăng ký phiên bản 64 bit, hãy hủy đăng ký từng dll bằng cùng một phiên bản.

More giúp bạn tìm thấy ở đây Team is Going from XP32 to XP64 for .NET Development - Any Gotchas?

Chúc may mắn

+0

Có, đó là tại chỗ, cảm ơn. Và cảm ơn về liên kết này. – ssg31415926

4

tôi đã cùng một vấn đề cố gắng xây dựng và chạy một ứng dụng .NET trên Windows 7 x64 mà gọi interop.domino.dll, đó là 32 chỉ một chút.

Để giải quyết, tôi biên dịch lại ứng dụng .NET để chạy cụ thể dưới dạng x86 khi chạy trên hệ điều hành x64.

Tôi đã sử dụng Visual Studio 2010 Express Edition, điều này khó hơn để nhắm mục tiêu cụ thể cho nền tảng x86 so với phiên bản trả tiền cho các phiên bản.

Giải pháp là:

  1. Bấm Tools> Options> CÁC DỰ ÁN VÀ GIẢI PHÁP
  2. Đánh dấu vào ô "Show tiên tiến xây dựng cấu hình" và nhấn OK
  3. Bấm Tools> Settings> SETTINGS séc EXPERT để xem trình quản lý cấu hình xây dựng
  4. Nhấp vào XÂY DỰNG> CONFIGURATION MANAGER chọn trình đơn thả xuống nền tảng thành X86 và nhấp vào ĐÓNG
  5. Bây giờ, hãy tạo lại dự án
2

Có một kỹ thuật của IBM cho biết rằng các lớp Domino COM không được hỗ trợ trên hệ điều hành 64 bit. Xem https://www-304.ibm.com/support/docview.wss?uid=swg21454291 Vì vậy, nó có vẻ như ngay cả bằng cách biên dịch mã để chạy như x86 (theo câu trả lời của mpownie), bạn vẫn đang dùng một số cơ hội.