COM DLL erstellen (Einstiegspunkt definieren)

Hi.

Assembly Registration Tool (Regasm.exe)

The Assembly Registration tool reads the metadata within an assembly and adds the necessary entries to the registry, which allows COM clients to create .NET Framework classes transparently. Once a class is registered, any COM client can use it as though the class were a COM class. The class is registered only once, when the assembly is installed. Instances of classes within the assembly cannot be created from COM until they are actually registered.

Calling a .NET Component from a COM Component

Exposing .NET Components to COM (codeproject ging grad nicht bei mir, konnte also keinen Blick drauf werfen..)

Kannst ja auch mal das Zeug hier durchlesen, evt. steht da was hilfreiches für dich drinnen.

MfG,
Alex
 
das mit regasm.exe ist nicht schlecht, einziges Problem:

.Net Framework muss auf dem Rechner installiert sein, sonst geht die Registrierung der dll nicht.....
 
ok, dann kommt eben wieder die Geschichte mit C++ ins Spiel.

Noch mal zum Verständnis,

wenn ich mit C++ .Net ne DLL schreibe und die zu einer COM Dll exportiere, kann ich sie auch auf anderen Rechner ohne .Net Framework registrieren?
 
Sollte so sein.

Aber wieso hast du ein Problem mit dem Framework? Das Redistributable-Package ist erstens nicht groß und zweitens hast mittlerweile (wenn jeder brav seine Updates gemacht hast) auf allen XP Rechnern (und auf den meisten 2000ern, sowie ALLEN 2003ern) das Framework drauf. Auch Vista wird das .NET Framework vorinstalliert haben, da vieles unter Vista auf .NET basiert.
 
Wenn du die DLL von anderen Rechner aus verwenden willst brauchst du nicht COM sondern COM+ und dann wird es richtig kompliziert.
Das soll sich erst unter 2.0 verbessern.
 
In den Projekteingenschaften unter Konfigurationseinstellungen -> Erstellen sollte der Haken "Für Com-Interop registrieren" aktiviert werden.

Zusätzlich sollter der Namesraum in den Klassen System.Runtime.InteropServices eingebunden werden.

Auch müssen Verschiedenste Einstellungen in der AssemblyInfo vorgenommen werden, damit der Compiler entscheiden kann welche Schnittstellen er veröffentlicht.
Code:
'Die folgende GUID ist für die ID der Typbibliothek, wenn dieses Projekt in COM angezeigt wird
<Assembly: Guid("32XXXXXX-XXXX-XXXX-XXXX-XXXXXXXX93CA")> 

' Sichtbarkeit für öffentliche Member unter COM.
<Assembly: ComVisible(True)> 

' Art der generierten Schnittstelle.
<Assembly: ClassInterface(ClassInterfaceType.AutoDual)>

Der Code ist jetzt in VB.Net und wird in cSharp vermutlich von der Syntax abweichen.
Die GUID kannst du mit Hilfe des Visualstudio Tools generieren.
 
ok, die Einstellungen habe ich vorgenommen.

Interop Registrierung ist aktiviert.

Nun habe ich mir die Datei AssemblyInfo.cs vorgenommen.

Habe jetzt per Hand folgende Einträge in die Datei eingetragen. Wird auch ohne Fehler kompeliert!

[assembly: Guid("32323243-3214-4321-4321-4321234393CA")]
[assembly: ComVisible(true)]
[assembly: ClassInterface(ClassInterfaceType.AutoDual)]

Soweit so gut. Nun hab ich etwas gelesen über regsvcs.exe. Wenn ich darüber versuche die dll zu "registrieren" kommt die Fehlermeldung, dass die dll keinen "starken Namen" hat.
 
Zuletzt bearbeitet:
Zurück