2009-05-21 2 views
1

Ich arbeite an einer Anwendung, die mehr als ein paar DLLs in VB6 geschrieben hat. VB6-Code enthält COM-DLLs und OCX-Steuerelemente. Der Rest des Codes ist in C++ und C#. Mir wurde die Aufgabe zugewiesen, die Anwendungscode-Basis mit 64-Bit-Architekturen kompatibel zu machen. Jede Menge Hilfsmaterial ist für C/C++ - Code verfügbar, so dass es kein Problem gibt. Aber es ist nicht einfach, all diesen vb6-Code in .net oder eine andere Sprache umzuschreiben, um es mit 64bit kompatibel zu machen. Ich verstehe auch nicht die gesamte zugrunde liegende Logik, sondern gehe einfach davon aus, dass ein Neuschreiben nicht in Frage kommt.Laden/Interagieren mit einer vb6 COM DLL von einer 64bit Anwendung

Auf der anderen wissen wir alle, dass VB6 dlls nicht in 64-Bit-Umgebung arbeiten wird. Was sind meine Möglichkeiten?

1) Covert jede der DLL in eine EXE, die in 32bit geladen wird und es kann mit meinem Rest der 64-Bit-Anwendung über COM-Schnittstellen interagieren. Sehen Sie Probleme mit diesem Ansatz?

2) Ich bearbeiten Sie die Registrierung und laden Sie alle VB6-DLLs aus dem Prozess, laden Sie sie in Dllhost.

3) Machen Sie eine einzige 32bit exe, beziehen Sie alle diese VB6 dlls in dieser exe und laden Sie diese exe in 32bit Adressraum und der 64bit Teil meiner Anwendung kommuniziert mit der 32bit exe.

Das Hauptproblem, das mir bei allen oben genannten Ansätzen in den Sinn kommt, ist, was mit OCX-Steuerelementen zu tun ist ????

Irgendwelche Ideen? Wenn keine neuen Ideen als die oben genannten von Ihnen bevorzugt werden und warum?

+0

Haben Sie herausgefunden, wie die Kommunikation zu tun COM zwischen 64-32 mit? Es sieht immer noch so aus, als würde es eine Art Missverhältnis geben. –

+0

Nopes, ich habe noch kein Experiment gestartet, werde es aber aktualisieren, sobald Erfolg oder Misserfolg eintritt. – Paragon

+0

Eine solche Kommunikation sollte normalerweise reibungslos funktionieren - besonders wenn alle Schnittstellen kompatibel sind, wie in Ihrem Fall. –

Antwort

0

Wenn Sie viel vorhandenen VB6-Code haben, der verwendet, um in-Prozess zu laufen, würde ich zuerst in Frage stellen, wenn die Migration auf 64 Bit wirklich die Mühe wert ist. 64-Bit hat viele Vorteile für Server-Apps, aber für Desktop-Anwendungen reicht 32-Bit oft völlig aus. Und da WOW64 voraussichtlich für mindestens ein Jahrzehnt verfügbar sein wird, spricht wenig gegen das Ausführen von 32-Bit-Anwendungen auf 64-Bit-Windows.

Der Punkt ist, obwohl es möglich ist, dass durch Verwendung von Out-of-Process-Servern können Sie Ihre App so optimieren, dass es mindestens teilweise im 64-Bit-Modus läuft, dies wird wahrscheinlich einen erheblichen Einfluss auf die Leistung haben auf Speicher Overhead). Der Kunde hat daher absolut keinen Vorteil, wenn er die 64-Bit-Version seiner App wählt.

Das sagte, würde ich sagen, 2) oder 3) wäre die natürliche Wahl. 2) ist sicherlich einfacher zu implementieren, aber 3) gibt Ihnen mehr Kontrolle darüber, wie viele Out-of-Process-Server erstellt werden sollten und wie ihre Lebensdauer verwaltet wird.

+1

Ich verstehe alle Ihre Sorgen :(aber das Problem ist, dass meine Anwendung als Add-in in AutoCAD ausgeführt wird. Und AutoDesk erfordert, dass Sie 64-Bit-Version von AutoCAD kaufen, wenn Sie AutoCAD auf 64-Bit-Fenstern ausführen möchten. AutoCAD-Installer wird Ihnen nicht erlauben Installieren Sie AutoCAD im WoW-Modus auf einem 64-Bit-Windows.So muss meine Anwendung im 64-Bit-Modus laufen.Es ist keine Frage der Wahl für mich.Ich habe keine andere Wahl, als eine 64-Bit-Version meiner Anwendung für die Kunden, die installiert haben 64bit windows – Paragon

+0

Ich sehe, ich denke, ein wichtiger Aspekt vor einer Entscheidung ist, zu beurteilen, wie viel Kommunikation zwischen dem AutoCad-Prozess und einem (32-Bit-) OOP-Server stattfinden müsste, für Objekte, die sehr häufig verwendet werden Ich würde ernsthaft in Betracht ziehen, sie in C++ oder in einer anderen Sprache, die im 64-Bit-Prozess gehostet werden kann, neu zu implementieren.Für nicht so häufig verwendete Objekte kann eine Out-of-Process-Lösung angemessen sein Bei dieser Überlegung ist es schwer zu beurteilen, ob die Out-of-Process-Strategie tatsächlich durchführbar ist. –

+0

Kein einfacher Ausweg. Wir haben uns entschieden, unseren Code neu zu schreiben. – Paragon

0

Ich migriere von SQL 2000 x86 nach SQL 2008 x64.

Hier stehen wir vor einem ähnlichen Problem. Ich habe mich entschieden, DCOM zu verwenden.

Wie funktioniert es?

Ein 32-Bit-Server wird die Assembly hosten und die 64-Bit-Maschine wird DCOM aufrufen.

Es gibt Leistungseinbußen. BTW, der Aufwand im Vergleich zum Neuschreiben ... lohnt sich auf jeden Fall. :)

Grüße, Marcos Lima