Domanda: Come creare un oggetto COM in un'applicazione Universal Windows Platform (UWP)?Come creare un oggetto COM in un'applicazione UWP? (C#)
Motivazione: Voglio passare da WPF a UWP. Poiché il mio carico di lavoro richiede l'esecuzione di chiamate a librerie di terze parti accessibili solo tramite COM (per quanto ne so), ho bisogno di effettuare chiamate COM da UWP.
Contesto:
- C#
- .NET
- Visual Studio 2015
- di Windows 10
- Idealmente rivolto a tutti i dispositivi UWP, ma va bene se limitato al desktop/laptop.
Sfondo
In Visual Studio 2013 ("Classic Desktop" progetto in Visual Studio 2015), ho usato il codice 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");
Il progetto di Visual Studio richiesto un riferimento alla Microsoft.VisualBasic
utilizzare Interaction.CreateObject()
e la libreria dei tipi dell'oggetto COM.
Desidero utilizzare questo codice C# in un'applicazione Universal Windows Platform (UWP) prodotta da Visual Studio 2015 Enterprise su Windows 10 Education. Sono in grado di aggiungere un riferimento alla libreria dei tipi dell'oggetto COM, ma non sono in grado di fare riferimento a Microsoft.VisualBasic
poiché non viene visualizzato in Reference Manager di Visual Studio.
Pensieri, cercato soluzioni, la speculazione, ecc
ho aggiunto un riferimento a "Estensioni per il desktop di Windows per l'UWP" sperando che potrebbe consentire chiamate verso normali caratteristiche di .NET, ma non ho capito come usarlo ancora.
Immagino che anche se le applicazioni UWP fondamentalmente non possono effettuare chiamate COM, allora potremmo almeno costruire un wrapper che chiama un normale programma .NET (anche se attraverso le porte di rete) che a sua volta sarà in grado di eseguire il Chiamata COM Dal momento che è chiaramente possibile aggirare anche nel peggiore dei casi, penso che ci dovrebbe essere (e probabilmente lo è) una soluzione fornita da Microsoft per creare oggetti COM. Ma credo che dal momento che UWP è così nuovo, la documentazione online è piuttosto scarsa e difficile da trovare in questo momento.
Update # 1
trovato un articolo di MSDN, Win32 and COM for Windows Runtime apps and Universal Windows Platform (UWP) apps, che sostiene che le applicazioni WinRT (che comprende le applicazioni UWP) possono utilizzare solo un sottoinsieme di oggetti COM. MSDN suggerisce di utilizzare un elemento API COM supportato o di migrare da un'API COM non supportata a una sostituzione funzionale.
Sono stato in grado di trovare questo articolo cercando su google un errore in fase di esecuzione dopo aver trovato un modo per effettuare una chiamata COM alla libreria di terze parti.L'errore:
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.
io sono ancora incerti circa se o non c'è un modo incorporato per accedere alle API COM per le mie librerie di terze parti. Se non c'è, potrebbe significare che dovrò creare il mio wrapper usando le porte di rete o qualcosa del genere, il che sembra sbagliato.
Hai ragione riguardo l'attenzione per le app aziendali, quindi l'impossibilità di utilizzare lo Store non è critica. Grazie per il collegamento ai Componenti di Runtime di Windows Brokered: è esattamente quello che stavo cercando! – Nat
Ho creato un modello per il componente mediato per l'app di Windows universale. Controlla il mio post qui https://xamltips.wordpress.com/2015/11/13/brokered-component-for-uwp-on-windows-10/ – Lance