Frage

Ich habe einen .NET -Code, den ich aus VB6 -Code verwende. Ich habe dies immer auf einer XP -Maschine entwickelt, indem ich eine vb6.exe.manifest -Datei erstellt habe, in der die abhängigen .NET -Assemblys aufgeführt sind.

Zum Beispiel sagen meine 2.NET -Assemblys einige Ich habe auf die .NET -Assemblyversion in AssemblyInfo.cs gesetzt):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
  <assemblyIdentity
              type = "win32"
              name = "client"
              version = "1.1.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.A"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.B"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
</assembly>

Dann habe ich zusammen mit den DLLs im selben Verzeichnis die Assemblys und ihre eigenen Manifestdateien. Hier ist ein Beispiel "Einige.Assembly.A.Dll.Manifest":

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
  <assemblyIdentity
      type="win32"
      name="Some.Assembly.A"
      version="1.1.0.0" />
  <clrClass
      clsid="{F1234567-1234-1234-1234-123456789012}"
      progid="Some.Assembly.A.Class1"
      threadingModel="Both"
      name="Some.Assembly.A.Class1" >
  </clrClass>
  <file name = "Some.Assembly.A.dll" />
</assembly>

Ich renne auch tlbexp Auf referenzierten DLLs zum Erstellen von TLB -Dateien, und dies habe ich in meiner VB6 -Projektdatei verweist.

Ich möchte zu einem Windows 7 64 -Bit -Gerät wechseln. Mit den gleichen Methoden, wenn ich den VB6 -Code drücke, der das .NET -Objekt auf dem Win7 -Computer instanziiert, bekomme ich

"ActiveX -Komponente kann kein Objekt erstellen."

Auf XP gelingt es. Wenn ich absichtlich die abhängige Versammlung in vb6.exe.manifest - auf XP falsch falsch geschrieben habe, bekomme ich

"Diese Anwendung hat nicht gestartet, da die TEH -Anwendungskonfiguration falsch ist. Die Neuinstallation der Anwendung kann dieses Problem beheben."

Auf Win7, VB6, lädt nur. Es ist, als ob es das Manifest auf Win7 ignoriert, daher kann ich mein .NET -Objekt nicht mit Reg Free -Methoden auf Win7 laden. Wenn ich regasm Die DLL, alles funktioniert.
Irgendwelche Ideen darüber, wie VB6 mit Reg Free Com auf Win7 (64 Bit) funktioniert?

War es hilfreich?

Lösung

Haben Sie versucht, VB6 im WinXP -Kompatabilitätsmodus einfach zu installieren und auszuführen?

Andere Tipps

Wenn Sie VB6.exe neu kompilieren oder auf andere Weise für die Win7 -Maschine verarbeiten, sollten Sie wissen, dass einige der neueren Entwicklungstools automatisch ein Manifest einbetten, sodass Sie dies möglicherweise überprüfen möchten (ein schneller Weg besteht darin, die ausführbare Datei in Vs zu öffnen , und suchen Sie nach einer Ressource RT_MANIFEST mit ID 1). Wenn es ein eingebettetes Manifest gibt, werden externe Manifests ignoriert, weshalb, wenn Sie das externe Manfiester bearbeiten, passiert nichts und sein Inhalt wird ignoriert.

Abgesehen davon, was Erno über SxStrace gesagt hat (könnten Sie die Ergebnisse, die Sie aus SXstrace erhalten, veröffentlichen?), Aktualisieren Sie den Zeitstempel von VB6.exe, wenn das Manifest in ihn eingebettet ist, oder vb6.exe.manifest sonst. Vista + Win7 Cache Der Inhalt der Manifests, kündigte den Zeitstempel des Wurzelmanifests, sodass Ihre lokalen Änderungen möglicherweise nicht abgeholt werden. Wenn SXstrace Ihnen leere Ergebnisse liefert, aktualisieren Sie die Zeitstempel und versuchen Sie es erneut.

Das erste, was mir in den Sinn kommt, ist, dass es sich lohnt, den .NET -Code zu unterschreiben. Es kann sein, dass implizit ein höheres Sicherheitsniveau auf Win7 64 -Bit angewendet wird, das unterschriebene Versammlungsreferenzen erfordert.

Darüber hinaus können Sie versuchen, das Problem durch (in keiner bestimmten Reihenfolge) einzugrenzen,

  • Beschriften Sie das Programm als Administrator und erneutes aus.
  • Beschriften Sie das Programm so, dass er im "XP/Win2K COMPATIBILY -Modus" ausgeführt wird.
  • Laufen Sie es hinein Abhängigkeitswalker (Es hat die Option zum Simulieren von Programmlast und protokolliert Fehler.)

Viel Glück!

Ich habe dieses hybride Debuggen neulich gemacht und den Fehler erhalten: '' ActiveX -Komponente kann kein Objekt erstellen. '' Ich schlage vor, Sie folgen diesem Artikel Debugging Hybrid Visual Basic 6.0/Visual Basic .NET -Anwendungen Und stellen Sie sicher, dass ein Bare -Bones -Beispiel auf Ihrem Win7 -PC funktioniert (ich realisiere es mit Regasm). Dann habe ich mit dem Reg Free Bit die folgenden Links untersucht: .NET -Objekt aus VB6 ohne Verwendung von Regasm.exe? und hier Registrierungsfreie Aktivierung von .NET-basierten Komponenten: eine Vorgehensweise

Sie könnten versuchen zu verwenden /Win32 Option von tlbexp Auf einem x64 os.

Aus Dieser Blog -Beitrag

Sie können SXstrace verwenden, um das Problem zu debuggen. Um zu starten, führen Sie "sxstrace trace -logfile: sxstrace.etl" aus, um die Protokolldatei in etwas zu konvertieren, das Sie anzeigen können "SxStrace Parse -logfile: sxstrace.etl -outfile: sxstrace.txt".

Hast du das versucht?

Eine andere Sache ist, dass Sie auf Vista/Windows 7 problemlos auf UAC stoßen können, haben Sie das überprüft?

Ich konnte erfolgreich .NET-Klassen von VB6 in Win 7-64 mithilfe von Manifesten verwenden, die von erstellt wurden Seite an Seite Manifest Maker. Es hat eine kostenlose Testversion.

Vergessen Sie nicht, die .NET Runtime -Version aufzunehmen, auf die Ihre Klassen abzielen. Das kann Ihr Problem sein, mit dem Sie zunächst nur mit dem .NET 4 -Clientprofil vorinstalliert sind.

Regasm ist viel mehr als nur die TLB oder die erforderlichen Registrierungsschlüssel.

Zum Beispiel kann es COM -sichtbare Schnittstellen basierend auf COM -sichtbaren Typen generieren. Regasm wird dies tun, wenn der COM -sichtbare Typ beispielsweise keine Schnittstelle implementiert.

Haben Sie COM -sichtbare Typen, die keine Schnittstelle implementieren (oder die COM -Schnittstelle nicht mithilfe des ComdeFaultInterfaceAttribute definieren)?

Wenn ja, kann dies Ihr Problem sein.

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