Esiste un equivalente a COM EXE fuori processo in .NET?
Domanda
Una delle cose belle di COM / ActiveX è stata la EXE fuori processo. Potresti avere un EXE che espone metodi e proprietà in una forma utilizzabile da entrambi gli altri processi, inclusi VBScript e JScript. Allo stesso tempo, EXE potrebbe avere una sua funzionalità, correlata o non correlata a quella esposta dalla sua libreria dei tipi.
Qual è l'equivalente di .NET?
Ho un progetto VB6 esistente che è un interprete del linguaggio di scripting (usando MSScript) e una risorsa di varie funzioni dello strumento per altri linguaggi di scripting. È stato suggerito di provare a convertirlo in .NET.
Funzionerà o finirò per dividere un oggetto in due?
Soluzione
I servizi aziendali ti permetteranno di fare proprio questo. È possibile eseguire un componente COM come:
- Un processo DLLHost
- Un servizio
- Una libreria inproc (è nello stesso processo dell'altro codice)
Ci sono numerosi esempi su Internet al riguardo. Ciò che si riduce è:
- Decora le tue classi che devi esporre a COM con le interfacce
- I componenti che si desidera ospitare devono essere derivati ??da ServicedComponent
- Decora le tue interfacce con un GuidAttribute (usa un unico Guid)
- Decorare le interfacce e le classi esposte a COM con un attributo ComVisible (true)
Spero che questo aiuti.
Altri suggerimenti
La corrispondenza .NET è .NET Remoting per .NET 2.0 e WCF per 3.0+. Tuttavia, se è necessario comunicare con oggetti COM, è necessario creare un oggetto esposto COM. Ci sono alcuni tutorial là fuori per quello.
Ci sono alcune opzioni per questo; l'essere più ovvio componenti sottoposti a manutenzione ; ciò consente di ospitare il codice gestito in COM + per eseguirlo in un processo separato, ma è necessario chiamare GAC / COM, ecc.