Câu hỏi: Cách tạo đối tượng COM trong ứng dụng Nền tảng Windows phổ quát (UWP)?Cách tạo đối tượng COM trong ứng dụng UWP? (C#)
Động lực: Tôi muốn chuyển từ WPF sang UWP. Vì khối lượng công việc của tôi yêu cầu thực hiện cuộc gọi đến thư viện của bên thứ ba chỉ có thể truy cập thông qua COM (cho đến khi tôi biết), tôi cần thực hiện cuộc gọi COM từ UWP.
Bối cảnh:
- C#
- NET
- Visual Studio 2015
- Windows 10
- Lý tưởng nhất là nhắm mục tiêu tất cả các thiết bị UWP, nhưng không quan trọng nếu bị hạn chế để máy tính để bàn/máy tính xách tay.
nền
Trong Visual Studio 2013 ("Classic Desktop" dự án trong Visual Studio 2015), tôi đã sử dụng mã C#
// Conceptual:
DotNetInterface comObjectInstance =
(DotNetInterface)Microsoft.VisualBasic.Interaction.CreateObject(
"this string specified the COM object type"
);
// Example: Open Excel via COM:
Excel.Application oApp = (Excel.Application)Interaction.CreateObject("Excel.Application");
Các Studio dự án Visual cần một tham chiếu đến Microsoft.VisualBasic
sử dụng Interaction.CreateObject()
và thư viện kiểu đối tượng COM.
Tôi muốn sử dụng mã C# này trong ứng dụng nền tảng Windows phổ biến (UWP) được sản xuất bởi Visual Studio 2015 Enterprise trên Windows 10 Education. Tôi có thể thêm một tham chiếu đến thư viện kiểu đối tượng COM, nhưng không thể tham chiếu Microsoft.VisualBasic
vì nó không xuất hiện trong Trình quản lý tham chiếu của Visual Studio.
Suy nghĩ, cố gắng giải pháp, đầu cơ, vv
tôi đã thêm một tham chiếu đến "Windows Extensions Desktop cho UWP" hy vọng rằng nó có thể cho phép các cuộc gọi đến các tính năng bình thường .NET, nhưng chưa tìm ra làm thế nào để sử dụng nó được nêu ra.
Tôi thấy rằng ngay cả khi các ứng dụng UWP về cơ bản không thể thực hiện cuộc gọi COM, thì ít nhất chúng ta cũng có thể xây dựng một trình bao bọc gọi chương trình .NET bình thường (ngay cả khi qua các cổng mạng). Cuộc gọi COM. Vì nó rõ ràng có thể làm việc xung quanh ngay cả trong kịch bản trường hợp xấu nhất, tôi cảm thấy như có nên (và có lẽ là) một giải pháp do Microsoft cung cấp để tạo các đối tượng COM. Nhưng tôi đoán từ khi UWP quá mới, tài liệu trực tuyến khá thưa thớt và khó tìm ngay bây giờ.
Update # 1
Tìm thấy một bài báo MSDN, Win32 and COM for Windows Runtime apps and Universal Windows Platform (UWP) apps, mà tuyên bố rằng các ứng dụng WinRT (trong đó bao gồm các ứng dụng UWP) chỉ có thể sử dụng một tập hợp con của các đối tượng COM. MSDN đề nghị sử dụng một phần tử COM API được hỗ trợ hoặc di chuyển từ một API COM không được hỗ trợ sang một sự thay thế chức năng.
Tôi đã có thể tìm thấy bài viết này bằng cách googling một lỗi thời gian chạy ném sau khi tôi tìm thấy một cách để thực hiện cuộc gọi COM đến thư viện bên thứ ba của tôi.Lỗi:
An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.ni.dll but was not handled in user code
Additional information: Creating an instance of the COM component with CLSID {[edit: GUID removed]} using CoCreateInstanceFromApp failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Please make sure your COM object is in the allowed list of CoCreateInstanceFromApp.
Tôi vẫn không chắc chắn có hay không có cách tích hợp để truy cập API COM cho thư viện của bên thứ ba. Nếu không có, nó có thể có nghĩa là tôi sẽ phải làm cho wrapper của riêng tôi bằng cách sử dụng cổng mạng hoặc một cái gì đó, mà có vẻ sai.
Bạn đang tập trung vào các ứng dụng dành cho doanh nghiệp, do đó không có khả năng sử dụng Cửa hàng không quan trọng. Cảm ơn bạn đã liên kết đến các thành phần Windows Runtime Brokered - đó chính xác là những gì tôi đang tìm kiếm! – Nat
Tôi đã tạo mẫu cho thành phần được môi giới cho ứng dụng Cửa sổ chung. Kiểm tra bài đăng của tôi tại đây https://xamltips.wordpress.com/2015/11/13/brokered-component-for-uwp-on-windows-10/ – Lance