C# *.dll für VB6 Programm erstellen

nein

ToString liefert das aktuellen Objekt als String (Zeichenkette) zurück. In dem Fall wird es auf einen Instanz vom Typ StringBuilder aufgerufen und dir der Inhalt / die Daten dessen (also der gebaute String) zurückgeliefert
 
Also brauch ich das nicht so machen?
BTT:
Dieses Problem besteht immer noch :
COM Interop registration failed. There are no registrable types in the built assembly.
 
Also brauch ich das nicht so machen?
BTT:
Dieses Problem besteht immer noch :
COM Interop registration failed. There are no registrable types in the built assembly.
Gut, also nach viel Johanneskrauttee...

Ausgehend von deinem Code, mache einfach aus diesem Konstruktor:
C#:
#region Constructor
        public HexRC4(string sPublicKey)
        {
            int iKeyHash = CalculateKeyHash(sPublicKey);
            Initialize(iKeyHash);
        }
        #endregion
einen Standardkonstruktor, indem du den Code durch den folgenden ersetzt:
C#:
#region Constructor
        public HexRC4()
        {
        }
        #endregion
Den alten Konstruktor kannst du sowieso nicht gebrauchen, da du ihn nicht von COM aus aufrufen kannst.

Gruß
 
Herzlichen Glückwunsch bist einer der wenigen die mich je Verwirrt haben.

Also was nun, den oberen Code ersetzten?
oder änderen in den unteren?

Edit:/
Wow es lässt sich tatsächlich Kompilieren, nun muss es nur noch funktionieren.

Mein VB6 Programm lädt die Datei, bekommt aber den Wert nicht, Hier der Code und die Fehlermeldung.
Code:
Public Declare Sub HexRC4 Lib "ClassLibrary1.dll" Alias "GeneratePublicKeyString" (Data As String)

Public Sub LoadDll()
    If (hModule > 0) Then
        MsgBox "an instance of ClassLibrary2.dll is already loaded"
    Else
        hModule = LoadLibrary(App.Path & "\ClassLibrary1.dll")
        If (hModule > 0) Then
            MsgBox "loaded ClassLibrary1.dll(" + Str(hModule) + ")"
            Call HexRC4
            MsgBox "initiated.."
        Else
            MsgBox "failed to load ClassLibrary2.dll"
        End If
    End If
End Sub

Private Sub Command1_Click()
LoadDll
End Sub

Run-time error '453':

Can't find DLL entry point GeneratePublicKeyString in Classlibrary1.dll
 
Zuletzt bearbeitet:
Mein VB6 Programm lädt die Datei, bekommt aber den Wert nicht, Hier der Code und die Fehlermeldung.
Code:
Public Declare Sub HexRC4 Lib "ClassLibrary1.dll" Alias "GeneratePublicKeyString" (Data As String)
Das ist eine .NET DLL. Die kannst du nicht in VB6 laden.

Diese DLL wurde aber als COM Komponente registriert und läßt sich auch über COM ansprechen.

Am einfachsten ist es aber die TLB Datei in VB6 als Reference zum Projekt hinzuzufügen (Projekt->References Menü). Dann kannst du den Typ direkt nutzen:
Visual Basic:
Dim obj as HexRC4.HexRC4
Set obj = New HexRC4.HexRC4

Dim I as Integer: I = obj.CalculateKeyHash("...")
obj.Initialize(I)

Oder einfach direkt:
Visual Basic:
Dim obj
Set obj = CreateObject("HexRC4.HexRC4")
Ich kann es nicht ausprobieren, aber du bist ja auch der VB6 Experte...

Gruß

PS: Du kannst die Methode des Objektes auch nicht direkt aufrufen. Du mußt erstmal eine Instanz der Klasse erzeugen, da kannst du dann die Methode aufrufen, aber natürlich erst nachdem du das Objekt korrekt initialisiert hast.
 
Zuletzt bearbeitet:
sooo, fast 1 Uhr! Vielleicht sogar schon etwas später, wenn ich das hier poste!
Ich habe mich jetzt durch das gesamte Thema "gearbeitet" und ziehe folgenden Schluss:

1. CrimeTime: Schnapp dir ein Buch, eine Webseite oder was auch immer und befass dich mit den Grundlagen von .NET. Viele Probleme, um mit dem Standardkonstruktur nur eines zu nennen, verschwinden einfach, wenn man sich ein wenig in die Grundlagen von OOP und .NET einarbeitet.

2. Zwischendurch hatte ich das Gefühl, dass du etwas zu Faul zum selber Suchen warst... ich will nicht unterstellen, dass du gar nicht eine beliebige Suchmaschine bemüht hast, aber ein wenig mehr initiative und dieses Thema wäre sicherlich zielführender gewesen.
UND ICH BIN MIR SICHER... habe gerade selber mal gegoogelt wie das mit der TLB Datei und dem Einbinden funktioniert... Google bringt das gewünschte Ergebnis!

3. Jetzt gucke ich mal ein paar Tage in die Vergangenheit: TLB Dateien werden genauso wie Dlls als Verweis in VB6 Projekte eingebunden. Da ich mit .NET noch nie irgendwelche COM-kompatiblen Dlls geschrieben habe, sind hier andere Experten gefragt, falls es dazu noch Fragen gibt.
 
@FwDonnerbalken
1: Nach dem das hier Fertig ist werde ich Microsoft Visual Studio .Net 2003 Deinstallieren und nie wieder Öffnen.

2: ich habe mich bemüht was zu Finden um mir selbst weiter zu Helfen, doch ich fand nie das was ich brauchte.
Schön das du was gefunden hast, ich jedenfalls nichts passendes, habe 107 Seite eines Forums durch sucht, auf das wort "Type Library" nicht ein Thread half.
 
Hi

Schau mal, Microsoft liefert so gar eine Step-by-Step Anleitung in der KnowledgeBase:
http://support.microsoft.com/kb/817248
Die Anleitung ist zwar für VB.NET und VB6 aber funktioniert genauso mit C#-Assemblys

So und jetzt beruhigen wir uns alle wieder!

PS: War übrigens der erste Treffer bei Google. Suchbegriffe: VB6 .NET
 
Zuletzt bearbeitet:
Hi.

Nachtrag: Man kann keine statischen Methoden über COM aufrufen, d.h. du mußt im C# Code noch das Schlüsselwort static entfernen.

Gruß
 
Zurück