Announcement

Collapse
No announcement yet.

DLL mit regsvr32 registrieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL mit regsvr32 registrieren

    Hallo!
    Ich habe zum ausprobieren eine DLL unter .NET(als Projekt Klassenbibliothek) geschrieben, diese hat eine Funktion das zwei Zahlen multipliziert und den Ergebniss zurückliefert. Jetzt wollte ich diese Datei mit regsvr32 registrieren(damit ich z.B in Navision nutzen kann), dabei krieg ich ich eine Fehlermeldung: DLLRegisterServer-Eingangspunkt wurde nicht gefunden.
    Was mach ich falsch bzw. geht es überjaupt so einfach?

  • #2
    Hallo Eugen,

    1.) .NET-DLLs muss man nicht mehr registrieren, außer
    2.) Sie enthalten COM-Klassen und dann muss das Tool RegAsm.exe aus dem Verzeichnis C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\ verwendet werden.

    Warum möchtest Du die DLL registrieren bzw. was möchtest Du damit tun?

    Beste Grüße

    Martin
    www.aboutxml.d
    Martin Szugat
    www.aboutxml.de

    Comment


    • #3
      Hallo!

      Ich möchte eine Komponente in Navision benutzen dazu muss es aber eine COM-Klassenbiblithek sein. Jetzt soll es aber eine Möglichkeit geben eine .NET-Klassenbibliothek(DLL) zu benutzen als währe es eine COM-DLL.
      Das ist auch mein Ziel

      Comment


      • #4
        Dann ist <a href="http://www.entwickler-forum.de/webx?13@@.4a872ade/3">RegAsm</a> das richtige. Es erzeugt einen COM-Wrappe

        Comment


        • #5
          Zur programmierung:

          Wenn ich es richtig verstanden habe funktioniert es so:
          - den Klassen wird ein GUID-Attribut verpasst damit das Objekt eindeutig wird(mit guidgen.exe)
          - die DLL wird nicht mit regsvr32 sondern mit regasm registriert
          - jetzt kann man die Komponente benutzen als währe es eine COM-Komponente

          Ist das Vorgehen so korrekt

          Comment


          • #6
            Hallo,
            ja - prinzipiell reicht das aus. Das folgende Mini-Beispiel demonstriert das Prinzip:
            <code>
            ...
            [assembly: ComVisible(true)]
            [assembly: ClassInterface(ClassInterfaceType.AutoDual)]
            [assembly: Guid("7C44A011-1D56-3A42-A82C-85A7D302BF63")]
            ...
            </code>
            Mit RegAsm wird dann eine binäre Typbibliothek erzeugt, damit Win32-Clients dieses "COM-Objekt" nutze können:
            <code>
            RegAsm CSharpObj.dll /tlb:CSharpObj.tlb
            </code&gt

            Comment


            • #7
              Hallo!

              Was ich noch nicht so ganz verstehe, wozu die *.tlb Datei erzeugt wird. Leider habe ich dazu auch nichts richtiges im Internet gefunden. Brauche hilfe!!!

              Danke!

              Comment


              • #8
                Hallo,
                für Win32-Clients dieses COM-Objekts stellt die TLB-Datei den maschinenlesbaren binären Bauplan des Interfaces dar. Damit COM überhaupt funktioniert, musst der Typbibliotheks-Marshaler von Windows zur Laufzeit die Anpassung (Proxy- und Stub-Objekte) generieren - und dazu wird im Fall der frühen Bindung die TLB als "Anschlussbelegung" des Interfaces des COM-Objekts benötigt. Die TLB ist somit immer dann im Spiel, wenn auf einer Seite (COM-Objekt - Client) eine Win32-Anwendung beteiligt ist. Nur dann, wenn auf beiden Seiten .NET im Spiel ist, reichen die Informationen aus den Metadaten der Assembly aus (aber in diesem Fall wäre auch keine Umverpackung als COM-Objekt notwendig)

                Comment

                Working...
                X