Domanda

Sto pensando di imparare COM. Ma ho sentito che Microsoft ha lanciato .NET come alternativa a COM.Quindi vale la pena imparare COM?in realtà ho iniziato a imparare COM per il driver del dispositivo UMDF.Esiste un modo alternativo per lavorare su UMDF oltre a COM?

È stato utile?

Soluzione

UMDF è un framework per sviluppare driver di periferica in modalità utente. Credo che un requisito fondamentale per un driver di periferica è: carico veloce. Non voglio ritardare i miei tempi di avvio, solo perché ho un driver di periferica funky che deve caricare e JIT il framework .NET (preJITed ma comunque).

Certo che si può sviluppare librerie COM gonfi troppo ma essendo competente si può evitare. Non si può evitare di runtime .NET.

Quindi, anche se UMDF consentito per lo sviluppo .NET io a questo punto di tempo non vorrebbe i driver di periferica scritto in .NET.

Do non fraintendetemi. Amo .NET. Io non credo si mescola che bene con i driver di periferica, anche se stiamo parlando di driver usermode.

Se si guarda a COM Penso che aiuta a capire il motivo per cui è stato sviluppato: per fornire mantenere l'interoperabilità tra i componenti sviluppati in ambienti diversi. Questo era indietro negli anni '80. Ora la gente ha lamentato COM nel corso degli anni, ma in realtà è molto successo a questo. Ci sono stati alcuni errori nel modello di implementazione di COM (cioè la dipendenza del Registro) e di altre scelte progettuali interessanti che hanno fatto gli sviluppatori di graffiare le loro teste. Tuttavia, il nucleo di COM (cioè IUnknown) è ancora suono IMO.

Altri suggerimenti

COM è vecchio, noioso e frustrante. Io non credo che nessuno ha mai goduto di lavorare con COM. Quindi in generale, vi consiglio contro di imparare a meno che non hai un motivo davvero convincente. Se v'è una libreria COM là fuori che è necessario utilizzare, mi piacerebbe invece imparare ad usare attraverso l'interoperabilità COM, che consente di lavorare con COM da .NET.

Per essere chiari, .NET era destinato a sostituire COM.E ha funzionato bene, ha avuto molto successo.Ma COM lo è ovunque in Windows, non puoi agitare un bastone su un tipico programma e non imbatterti in COM da qualche parte.Ciò inizia con il primo bit di codice in qualsiasi programma GUI .NET, [STAThread].

Ci sono moltissime cose in Windows che non hanno ancora ottenuto il wrapper .NET amichevole.Ciò non è sempre necessario, CLR ha un eccellente supporto per l'interoperabilità COM.Ben visibile dalla finestra di dialogo Aggiungi riferimento, la scheda COM è piena di gadget.Ma ciò che vedi in quell'elenco sono componenti appositamente progettati per essere facili da utilizzare Qualunque ambiente di esecuzione.Implementano un sottoinsieme di COM chiamato "OLE Automation".

L'automazione è un sottoinsieme molto ristretto, funziona così bene perché ciò che puoi effettivamente fare è limitato.Esistono tuttavia frammenti di codice che non si adattano a quel sottoinsieme.Il tipo per il quale non è possibile trovare una libreria dei tipi.Senza la libreria dei tipi sei fregato in .NET.Il componente più visibile con questo problema è la shell.Windows Explorer.Scrivere un'estensione della shell nel codice gestito lo è difficile.

Il problema è che le dichiarazioni dell'interfaccia COM sono state originariamente progettate per funzionare bene su un compilatore che implementa l'ereditarietà multipla.C++ in particolare.Una dichiarazione di interfaccia .NET non viene mappata correttamente a un'interfaccia COM se tale interfaccia COM è stata derivata da un'altra interfaccia COM.Il CLR genera la tabella v errata.Questo è accennato in questo Articolo della rivista MSDN, anche se la conclusione dell'autore è del tutto sbagliata.

Voi Potere scrivere dichiarazioni di interfaccia COM in un linguaggio .NET e implementarle.È proprio quello che ottieni NO aiuto dall'SDK.E che dovrai conoscere COM abbastanza bene per farli bene.

Anche UMDF si adatta a questo modello, le sue interfacce sono derivate da IUnknown.Nessuna libreria di tipi.Nessun wrapper gestito che io conosca.Voi Potevo scrivi il tuo codice in C# ma dovrai scrivere tu stesso tutte le dichiarazioni dell'interfaccia.Realisticamente, qui si applica solo il C++.

Sì, dovrai imparare COM.

COM è stato utile perché ha permesso di costruire un API indipendente linguaggio che potrebbe essere consumato da più lingue. Ora .net viene utilizzato per circa lo scopo sampe, anche se è meno accessibile. Se si programma .net, "solo il lavoro" molti COM API, anche se è bene per ottenere una certa comprensione di base di come funziona COM (in modo tale che utilizzi COM conteggio dei riferimenti per la gestione della memoria, mentre .NET utilizza la raccolta dei rifiuti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top