Frage

Ich habe versucht, dieses Problem für eine lange Zeit zu lösen, und nichts scheint zu funktionieren.

Ich habe einen COM-DLL in VB6 geschrieben. Ich füge einen Verweis auf diese DLL in .net, mit den ‚isoliert‘ und ‚Kopie lokalen‘ Eigenschaften auf true gesetzt auf der Referenz. Offenbar soll dies reg frei com ermöglichen.

Aber es funktioniert nicht. Wenn ich auf einem anderen Computer versuchen, oder die DLL mit Regsvr32 deregistrieren, versuchen die DLL löst eine Ausnahme für den Zugriff auf (im Wesentlichen sagt die gewünschte com-Klasse nicht existiert). Die DLL und Manifest-Dateien sind im selben Ordner wie die EXE, aber es scheinbar einfach total ignoriert sie.

Was mache ich falsch? Ich habe eine Tonne Streuartikel über diese Zeilen lesen, aber keiner von ihnen geben Sie mir eine funktionierende Lösung. Ich habe mit Visual Studio ohne Erfolg gebastelt. Ich habe eine kleine Menge mit Make-my-Manifest gebastelt, aber es hat nicht funktioniert (auch auf einem Testprojekt).

War es hilfreich?

Lösung

Ich war die Erstellung und Verwendung der COM-Klasse auf einem Nicht-UI-Thread. Offenbar Reg-Free com auf VB6 DLLs funktioniert nicht in dieser Situation. Dieser Test Code zeigt es:

Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

Wenn ich dies mit dem DLL normalerweise registriert laufen, folgen beiden Tests. Wenn ich reg frei com verwenden, schlägt der Gewinde Test, obwohl der normale Test erfolgreich ist nach wie vor. Sieht aus wie das wird einen großen Schmerz sein, um herum zu arbeiten.

Andere Tipps

Ich bin mir ziemlich sicher, dass, wenn Sie COM-Komponenten auf diese Weise der COM-Komponente Import Referenz jedes Mal passiert, Sie zu bauen. Das bedeutet, dass die COM-Komponente muss die traditionelle Art und Weise registriert werden, auf jeder Maschine wird das Projekt gebaut auf.

Hier ist ein Link rel="nofollow die Registrierung unter Verwendung beschreibt kostenlos com-Interop. Wenn Sie bereits getan haben dies bitte Ihre Manifest-Datei schreiben. Vielleicht haben Sie einen Tippfehler haben Ihr fehlt.

Bearbeiten

Nur ein Gedanke könnte einfacher sein, nur um die DLL zum ersten Mal registriert die App auf eine neue Maschine laufen. Die Registrierung ist kostenlos com interopt ist nur unter Windows XP und höher also, wenn Ihr alle Dinosaurier Targeting da draußen wird es nicht funktionieren.

Hier ist ein Auszug aus der Fehlerbehebung Abschnitt einer MSDN Artikel auf reg frei COM. Entschuldigt, wenn Sie haben es schon gesehen. Die gute Nachricht: Sie sind bereits Teil des Weges durch die einzelnen Schritte. Er schlägt vor, das Problem in Windows Server 2003 Wiedergabe von (vielleicht mit Virtual PC ?) und dann sollte das Ereignisprotokoll helfen.

  

Zuerst sollten Sie ... Ihr Kunde arbeitet mit   einen registrierten Server; dann deregistrieren   der Server und stellen Sie sicher, dass Ihre Fehler   Nachricht ist, was Sie erwartet; und   schließlich ... Handwerk und bereitstellen manifest   Dateien. Auf diese Weise Ihre Fehlerbehebung   Bemühungen ... wird auf das beschränkt werden,   Struktur Ihrer Manifest-Dateien (und   Die korrekte Einbettung des Montage   manifestieren, wenn Sie sich dazu entscheiden, dies zu tun).

     

Bei der Fehlerbehebung Anmeldung frei   COM Fragen, die Ereignisanzeige auf   Windows Server 2003 ist dein Freund ...   Blick in dem Systemereignisprotokoll für Ereignisse aus dem COM-Server.   Ich schlage vor, Sie nicht, dass Sie das sehen   Windows XP Ereignisprotokoll ...   es wird immer ein enthalten   Nachricht ..., die nicht hilft   das Problem identifizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top