COM Referencing in .NET

20/11/2009 - 20:27 von Milan | Report spam
Hallo,

ich hab angefangen mit COM unten C# .NET VS2008 zu arbeiten und ich habe 3
Fragen:

1. warum muss ich nicht immer GUID für jede COM server Interface und Klasse
angeben? Es reicht schon nur [ComVisible(true)] zu

schreiben ? Warum ist beides erlaubt ?

2. ich registriere ein COM "yClassLibrary.dll" mit:

regasm MyClassLibrary.dll /tlb: MyClassLibrary.TLB

und jetzt von anderen Projekt aber in gleichem Solution ich will eine
Reference nach MyClassLibrary.dll setzen (im COM Tab von Add

Reference Dialog), aber da steht kein MyClassLibrary.dll sonst nur
MyClassLibrary.TLB ! Ich erwarte dass ich sehe auch

MyClassLibrary.dll aber es ist nicht da, warum ? Um umgehen zu können ich
muss explizit Pfad nach COM.dll geben aber dann COM macht kein

Sinn(normalaweise ich sollte nicht wissen wo COM.dll steht)

3. ich habe in ein Paar Test Projekte nachgekuckt dass beim DoppelteKlick an
Solution Explorer/References/irgendwelche_COM_Name in

Object Browser es ist Automatisch ausgewallt "Interop.irgendwelche_COM_Name"
und nicht "irgendwelche_COM_Name" warum ?


Jede Hilfe ist Willkommen
Grüß,
Zoki
 

Lesen sie die antworten

#1 Frank Dzaebel
21/11/2009 - 15:57 | Warnen spam
Hallo Milan,

1. warum muss ich nicht immer GUID für jede COM server Interface
und Klasse angeben? Es reicht schon nur [ComVisible(true)] zu
schreiben ? Warum ist beides erlaubt ?



Beides erlaubt, nur (1) wàre F5-Feeling. .NET macht
sich ggf. selber die GUIDs. Es ist spàter sauberer, wenn Du
die GUIDs selber machst.


2. ich registriere ein COM "yClassLibrary.dll" mit:
regasm MyClassLibrary.dll /tlb: MyClassLibrary.TLB
und jetzt von anderen Projekt aber in gleichem Solution ich will
eine Reference nach MyClassLibrary.dll setzen (im COM Tab
von Add Reference Dialog), aber da steht kein MyClassLibrary.dll
sonst nur MyClassLibrary.TLB ! Ich erwarte dass ich sehe auch
MyClassLibrary.dll aber es ist nicht da, warum ?



Ein paar Tips:

Zitat:
"Im Dialogfeld Verweis hinzufügen werden nicht automatisch alle
Assemblys angezeigt, auch wenn sie im globalen Assemblycache (GAC)
installiert wurden. Das Dialogfeld Verweis hinzufügen ist pfadbasiert,
und es gibt mehrere Methoden zum Anzeigen einer Assembly [...]"

aus:

[Dialogfeld "Verweis hinzufügen"]
http://msdn.microsoft.com/de-de/lib...wa60a.aspx

___________

Ansonsten ggf. ... versuche einmal: regasm /codebase

[Leon Mayne: Running regasm /codebase in a Visual Studio setup
project]
http://leon.mvps.org/DotNet/RegasmInstaller.html

[Problembehandlung bei der Windows Installer-Bereitstellung]
http://msdn.microsoft.com/de-de/lib...ke5xt.aspx

oder über Custom Action in einem Installer ggf. mit:

RegistrationServices regsrv = new RegistrationServices();
regsrv.RegisterAssembly(assembly,
AssemblyRegistrationFlags.SetCodeBase);

[Setup Project: Custom Actions « Developer's Dump]
http://devdump.wordpress.com/2009/0...m-actions/

[Build and Deploy a .NET COM Assembly]
http://www.simple-talk.com/dotnet/v...-assembly/



Object Browser es ist Automatisch ausgewallt
"Interop.irgendwelche_COM_Name"
und nicht "irgendwelche_COM_Name" warum ?



Das ist normal, können wir spàter besprechen.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen