Erstellen einer DLL unter VB08 für VB6

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von genw.

    Erstellen einer DLL unter VB08 für VB6

    Hallo,

    ich möchte unter VB.net eine DLL erstellen und diese dann unter VB 6.0 nutzen. Schon den ganzen Tag versuche ich einen kleinen Test zum laufen zu bekommen, aber ich kriege es selbst nicht hin und auch Google konnte mir bisher nicht helfen.

    Unter folgender Konstellation herrscht bei mir:
    Ein Rechner mit Windows 7 (64bit) und Visual Studio 2008. (hier erstelle ich die DLL)
    Ein anderer Rechner mit Windows XP SP3 (32bit) und Visual Basic 6. (hier versuche ich sie zu benutzen)

    Folgendes habe ich bisher gemacht:
    - im VB08 ein neues Projekt mit dem Typ "Klassenbibliothek" angelegt
    - System.Runtime.InteropServices importiert
    - die COM-Sichtbarkeit der Klasse auf true gesetzt
    - eine neue Sub erstellt und diese public gemacht
    - die COM-Sichtbarkeit der Funktion auf true gesetzt
    - unter Projekt->Eigenschaften->Anwendung->Assemblyinformationen die COM-Sichtbarkeit angekreuzt
    - danach die DLL als Admin erstellt, damit auch die *.tlb erstellt wird
    - unter VB6 wollte ich mittels declare .. lib ... die Funktion definieren
    - ich habe auch die .tbl unter Projekt->Verweise eingebunden

    Aber es funktioniert nicht:
    - beim ausführen der Exe kommt der Fehler "DLL-Einspungpunkt * in *.dll nicht gefunden" (Laufzeitfehler 453)
    - wenn ich versuche die DLL direkt in VB6 als Verweis einzutragen wird mir das nur mit "Verweis auf angegebenen Datei kann nicht hinzugefügt werden." quitiert
    - öffne ich die DLL mit dem Dependency Walker, so sind keine Einstiegspunkte vorhanden
    - das öffnen der TBL schlägt komplett fehl ("No DOS or PE signature found. This file is not a valid 32-bit or 64-bit Windows module")

    Folgendes habe ich zusätzlich noch probiert:
    - ich habe durch Google etliche Beispielprojekte gefunden, aber keines davon hat bei mir funktioniert
    - ich habe noch mit "TlbExp", "Gacutil" und "RegASM" experimentiert (aber auch ohne Erfolg)

    Die Datei clsTestDLL.vb:

    Quellcode

    1. Imports System.Runtime.InteropServices
    2. <Microsoft.VisualBasic.ComClass()> _
    3. Public Class clsTestDLL
    4. <System.Runtime.InteropServices.ComVisible(True)> _
    5. Public Sub Foo()
    6. MsgBox("Test")
    7. End Sub
    8. End Class


    Die Datei frmMain.vb:

    Quellcode

    1. Private Declare Sub Foo Lib "TestDLL.dll" ()
    2. Private Sub cmdFoo_Click()
    3. Foo
    4. End Sub



    Ich habe die kompletten Projekt noch als Anhang hinzugefügt.


    Ich würde mich freuen wenn mir jemand helfen könnte.
    mit freundlichen Grüßen
    Alex
    Dateien
    • DLL.zip

      (47,71 kB, 282 mal heruntergeladen, zuletzt: )

    genw schrieb:

    Ein Rechner mit Windows 7 (64bit) und Visual Studio 2008. (hier erstelle ich die DLL)
    Ein anderer Rechner mit Windows XP SP3 (32bit)

    Bei 64 -> 32 dürfte vermutlich das Problem liegen. DLL sollte vermutlich als 32 Bit Version oder ggfs "Any CPU" (?) kompiliert werden. einfach mal beides ausprobieren.

    Problem gelöst

    Vielen Dank lordknoblauch!

    Folgendes habe ich nun gemacht:
    - mittels "Regasm TestDLL.dll /tlb: TestDLL.tlb" eine TLB-Datei erstellt (allerdings diesmal auf der VB6-Kiste)
    - diese als Verweis eingebunden

    Danach hat folgender Code geklappt:

    Quellcode

    1. Dim obj as TestDLL.clsTestDLL
    2. obj = New TestDLL.clsTestDLL
    3. obj.Foo



    Nochmal vielen Dank an alle! Jetzt kann ich endlich ins Wochenende ;)
    Alex