Datum
:
22-05-2008
Bij de ontwikkeling van een .NET applicatie wordt nog regelmatig gebruik gemaakt van COM componenten.
Voordat applicaties gebruik kunnen maken van een COM component, dient dit component eerst geregistreerd
te worden in het register van het Windows besturingssysteem. Er zijn situaties waarbij een COM component
niet geregistreerd kan worden, bijvoorbeeld omdat de gebruiker de rechten niet heeft om het register aan
te passen. In deze situaties kan er gebruik worden gemaakt van een handig alternatief, namelijk
“Registration-free COM activation”. In dit artikel wordt aan de hand van een voorbeeld beschreven hoe
een applicatie gebruik maakt van een COM component zonder deze te registreren.
Registration-free COM activation
Het bouwen van een COM Dll dat niet hoeft te worden geregistreerd in het register wordt mogelijk door het
gebruik van manifest bestanden die de COM activering mogelijk maken. Het bouwen van zo’n COM component
bestaat uit een aantal stappen; wat wordt uitgelegd a.d.h.v. een voorbeeld:
Bouwen COM component
| • |
Maak een “Class Library” project aan genaamd Calculator in Visual Studio.NET 2005. |
| • |
Bouw de interface ICalculator en de klasse Calculator die deze interface implementeert. |
| |
- |
De interface en klasse moeten in de namespace MachielseSoftware geplaatst worden. |
| |
- |
De calculator dient aan de vereisten van een COM component te voldoen: |
| |
|
- |
standaard constructor zonder parameters |
| |
|
- |
alle methoden en eigenschappen die zichtbaar moeten zijn voor de buitenwereld dienen de pubic access modifier te hebben |
| |
|
- |
een eigenschap is alleen zichtbaar indien de get én set methode is geïmplementeerd |
| |
- |
Voorzie de interface en klasse van de juiste attributen. |
| |
|
Afbeelding 1 : Calculator.cs
|
| • |
Ga naar het tabblad “Build” van de eigenschappen van het project en zet de
instelling “Register for COM interop” aan. |
| • |
Bouw een release versie van het Calculator project; de gebouwde Calculator.dll
zal automatisch worden geregistreerd in het register. |
| |
Afbeelding 2 : Registratie van Calculator.dll in het register
|
Bouwen client applicatie
| • |
Maak een “Standard EXE” project aan in Visual Basic 6.0. |
| • |
Voeg een referentie naar de Calculator aan het project toe (de referentie is alléén aanwezig indien de Calculator.dll is geregistreerd, zoals is gebeurd in de stappen hiervoor). |
| • |
Bouw het formulier. |
| |
Afbeelding 3 : Formulier |
| • |
Maak een executable genaamd client.exe. |
Bouwen registration-free COM activation
| • |
Maak het XML bestand client.exe.manifest (het gedeelte voor .manifest is de naam van de zojuist gebouwde client applicatie in VB6). In dit bestand wordt er gerefereerd aan de Calculator.dll nodig voor het vinden en creëren van het COM component. |
| |
Afbeelding 4 : client.exe.manifest |
| • |
Maak het XML bestand calculator.manifest (het gedeelte voor .manifest is de naam van de COM Dll). |
| |
Afbeelding 5 : calculator.manifest |
| • |
Maak het resource script bestand calculator.rc met daarin een verwijzing naar het bestand calculator.manifest. |
| |
Afbeelding 6 : calculator.rc |
| • |
Maak het script bestand calculator.cmd waarin de volgende taken worden uitgevoerd:
| - |
de registratie van het COM component in het register wordt ongedaan gemaakt |
| - |
aanmaken resource bestand |
| - |
compileren van de COM Dll Calculator.dll met daarin het manifest |
|
| |
Afbeelding 7 : calculator.cmd |
| • |
Voer het script calculator.cmd uit. |
Context
De voorbeeld applicatie bestaat uit twee componenten:
| • |
Client |
| |
Deze executable is geschreven in VB6 en opent een formulier
waarmee berekeningen uitgevoerd kunnen worden. |
| • |
Calculator |
| |
Deze COM Dll is geschreven in .NET 2.0 en bevat de reken functionaliteit. |
| |
Afbeelding 8 : Context diagram |
Klasse diagram
De client applicatie is geschreven in VB6 waarvoor gebruik gemaakt is van Visual Basis 6.0 (SP6);
het COM component is geschreven in .NET 2.0 waarvoor gebruik gemaakt is van Visual Studio.NET 2005.
De solution van het Calculator project in Visual Studio.NET 2005:
| • |
Client |
: bevat de project bestanden voor het VB6 project |
| • |
RFCA |
: bevat alle “Registration-free COM activation” gerelateeerde bestanden |
| • |
RFCA/Output |
: bevat de installatie bestanden |
| |
Afbeelding 9 : Solution in Visual Studio.NET 2005 |
Klasse diagram
De Calculator klasse implementeert de interface ICalculator en bevat vier methodes voor
het uitvoeren van berekeningen en één eigenschap waarmee de assemly versie kan worden opgevraagd.
Afbeelding 10 : Klasse diagram
Installatie & Testen
De applicatie is middels het XCOPY principe gemakkelijk te kopieren. Kopieer daarvoor de
bestanden client.exe, client.exe.manifest en calculator.dll naar dezelfde map.
Systeemeisen
Een COM component (geschreven in .NET) dat niet geregistreerd hoeft te worden, kan alléén
onder de besturingssystemen Windows XP (Service Pack 2 of hoger) of Windows Server 2003
(of hoger ) met daarop geïnstalleerd het Microsoft .NET Framewok 1.1 (of hoger) gebruikt worden.
Gebruik van Windows Scripting Host
Het is ook mogelijk om de werking van het een niet geregistreerd COM component te testen m.b.v.
een VBS script. Een VBS script wordt uitgevoerd door de Windows Scripting Host
(c:\windows\system32\wscript.exe). De hierboven besproken client applicatie (client.exe) kan
alleen het COM component gebruiken indien deze een bijbehorend manifest bestand heeft. Dit
geldt ook voor de Windows Scripting Host applicatie.
Volg de volgende stappen om een VBS script het COM component te gebruiken:
| • |
Kopieer het bestand client.exe.manifest en calculator.dll naar de map c:\windows\system32. |
| • |
Hernoem het bestand client.exe.manifest naar wscrip.exe.manifest. |
| |
Afbeelding 11 : wscript.exe.manifest |
| • |
Verander in het bestand de naam client in wscrip. |
Een VBS script dat uigevoerd wordt, zal nu overweg moeten kunnen met het COM component.
Afbeelding 12 : calculator.vbs
Afbeelding 13 : Resultaat uitvoeren calculator.vbs
Referenties