2011-07-28 29 views
9

Tôi có đối tượng COM bên thứ 3 (32 bit) mà tôi cần gọi từ ứng dụng C# của tôi (64 bit). Tôi biết tôi phải chạy đối tượng COM trong một quy trình riêng biệt. Đối tượng COM này có nhiều lớp được triển khai trong nó, vì vậy tôi đang cố gắng tránh viết trình bao bọc từ xa của riêng tôi để lộ tất cả các phương thức. COM + có vẻ là giải pháp đơn giản nhất. Tôi mở menu Component Services, tạo một ứng dụng COM + mới, thêm đối tượng COM của tôi như là một thành phần cho ứng dụng này. Tất cả mọi thứ dường như nhập khẩu đẹp mắt.Gọi 32 bit COM từ C# đang chạy ở chế độ 64bit

Trong ứng dụng C# của tôi, tôi đã thêm đối tượng COM ban đầu làm tham chiếu (tự động tạo thư viện kiểu). Sử dụng tham chiếu thư viện kiểu, tôi có thể tạo các đối tượng từ thành phần COM + (tôi thấy chúng bắt đầu quay trong cửa sổ Thành phần dịch vụ), nhưng khi tôi cố truy cập vào các phương thức của đối tượng, tôi gặp lỗi khi nói giao diện không được đăng ký.

Có ai có đầu mối không? Tôi đã quay trở lại và chạy regsvr32 trên đối tượng COM, nhưng tôi không nghĩ rằng nó là cần thiết, và nó đã không giúp đỡ. Việc sử dụng của tôi trong C# có đúng không? Tự động hoàn thành VS2008 không có vấn đề gì khi nhìn thấy các phương thức đó.

Ngoại lệ chính xác là: "Giao diện không đăng ký (ngoại lệ từ HRESULT: 0x80040155)"

không rõ ràng về chính xác những gì các điều khoản và vai trò về trong Component Services, tôi đã cố gắng thiết lập COM + đối tượng nhận dạng để chạy dưới tài khoản hệ thống, cả hai như là một dịch vụ địa phương và là người dùng tương tác. Tôi đã thêm Mọi người làm người dùng trong Vai trò. Mọi thứ đang chạy cục bộ, vì vậy không nên có vấn đề với đặc quyền của tệp hoặc bất kỳ điều gì tương tự.

Tôi cũng muốn nhắc lại rằng đối tượng COM này chứa nhiều lớp. Tôi đã tạo thành công một đối tượng lớp trong ứng dụng khách của tôi và đặt một số giá trị thuộc tính. Tôi cũng khởi tạo thành công một đối tượng lớp khác, nhưng đã nhận ngoại lệ này khi cố gọi một phương thức của đối tượng thứ hai này .... vì vậy tôi không nghĩ rằng có vấn đề với đăng ký đối tượng COM của tôi được đăng ký.

+0

COM + cực kỳ phụ thuộc vào quyền/quyền, v.v. có lẽ điều này đang xảy ra ... – Yahia

+4

Windows hiệu quả có hai đăng ký khác nhau, một cho 32 và một cho 64 bit. Tôi tin rằng giao diện được đăng ký trong một và sau đó lookep trong khác. – GSerg

+0

GSerg là chính xác. Nếu ứng dụng đăng ký nó là 32-bit, chạy trên hệ thống 64 bit, tất cả các mục đăng ký sẽ kết thúc trong nút nhân đôi WOW6432 thay vì nơi chúng thường đi. –

Trả lời

2

Chúng tôi đã có một tình huống tương tự, làm việc với một dll COM từ VFP.

Tất cả phụ thuộc vào quyền và quyền, như Yahia nói. Chúng tôi đã làm việc này bằng cách thực hiện việc này:

  • Cài đặt VFP oledb 9 drivers (dunno những gì bạn có thể có thể không cần thiết).
  • cung cấp cho dịch vụ mạng IIS_IUSR toàn quyền kiểm soát trên thư mục COM (bắt buộc để DLL có thể thực hiện một số lần đăng nhập vào thư mục riêng của nó, khi được gọi từ trang web).
  • chạy regsvr32.exe "c: \ xxx \ yourfile.dll" -> điều này sẽ thành công!
  • Tạo ứng dụng COM +, và thêm các DLL như một phần
  • Đặt COM ứng dụng + thông tin trên một wigh dùng đủ quyền

và chúng tôi phải làm một số cài đặt thêm về quyền trong ứng dụng hồ bơi/IIS, nhưng điều đó không cần thiết cho bạn tôi đoán.

Anyways, chỉ cần đảm bảo bạn có đủ khai thác gỗ, đảm bảo các dll được đăng ký, và sau đó nó tất cả về quyền quyền quyền ..

Chúc may mắn với nó!

1

Rất tiếc, hãy sử dụng "Trả lời" để trả lời nhận xét, nhưng dường như đó là đại lộ duy nhất của tôi.

Toàn bộ mục đích di chuyển sang hệ điều hành 64 bit là để tăng thêm dung lượng bộ nhớ, vì vậy việc chạy toàn bộ ứng dụng ở chế độ 32 bit không phải là một tùy chọn. Nó có thể liên quan đến vấn đề sau khi tạo thành công ba đối tượng lớp, tôi có thể thiết lập các thuộc tính trong một, gọi một phương thức không có đối số trong lần thứ hai, nhưng nó đã gọi một phương thức ở phần thứ ba, hai đối tượng khác làm đối số đã ném ngoại lệ.

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