Frage

Dies ist nur ein halbwegs Programmierung Frage. Zunächst einmal habe ich eine PCI-Express-Karte und 32/64 Bit-Treiber. Das Ziel-Betriebssystem verfügt über ein Windows-64-Bit-System. Ich las, dass unter Vista64 alle Treiber 64-Bit-Treiber zertifiziert werden müssen. Ist dies eine allgemeine Beschränkung unter 64-Bit-Betriebssysteme und ist dies auch auf „XP 64“ oder einem Linux-System anwenden?

So der Einfachheit halber sagen wir, ich verwenden, um einen 64-Bit-Treiber für das PCIe-Karte unter Vista64 und haben eine Reihe von 64-Bit-DLLs die Karten-Funktionalität zu nutzen. Auf der anderen Seite gibt es ein großes, ältere 32-Bit-exe-Programm, das das PCIe-Gerät verwenden muss. wäre eine wirklich große Mühe, das Programm zu 64-Bit-Umwandlung.

Was kann also getan werden, dass die 32-Bit-Programm zu bringen und die 64-Bit-Treiber zusammen? Ich habe gelesen, dass 32/64 Bit-Binärdateien und DLLs Mischen überhaupt nicht möglich ist, aber das ist schwer für mich zu glauben. Ich bin sicher, dass Sie ein Dokument unter Vista64 innerhalb einer App 32-Bit ausdrucken können, und Windows wird irgendwie wickeln diese um auf ein 64-Bit-Druckertreiber.

War es hilfreich?

Lösung

64-Bit-Zertifizierung ist nur unter Vista erforderlich; gibt es keine Bescheinigungsbehörde für Nicht-Windows-Plattformen, und ich glaube nicht, dass XP oder Windows Server prüft für die Zertifizierung (allerdings nicht sicher, und es kann davon abhängen, welchen Service Pack Sie sind auf).

Wenn Sie den Treiber über den Windows-API verwenden, dann sollte es kein Problem sein; Windows wird tun, um die 32 <-> 64-Bit-Übersetzungen im Kernel. Wenn Sie versuchen, den Treiber in Ihrem eigenen Prozess zu laden, die wahrscheinlich nicht möglich sein wird. Wie Dirk sagt werden Sie es in seinem eigenen Prozess ausgeführt werden müssen und kommunizieren über einen COM-Server. Ich bin mir nicht sicher, was HOOPS Sie durch springen, wenn Sie Ihre Fahrer in einer höheren Privilegien Ausführungsebene laufen müssen und wollen Anrufe, um es vom Benutzermodus machen.

Hoffentlich ist Ihre 64-Bit-DLLs verfügen über einen 32-Bit-API oder Windows bietet eine Standard-Treiber-Schnittstelle (wenn es ein gemeinsamen E / A-Gerät wie ein Display oder Netzwerkkarte ist).

Andere Tipps

Gibt es in Ihrer 32-Bit-Anwendung direkt auf den Fahrer anrufen? (Ich bin ein Simulator für den Fahrer zu erraten!)

Der einzige Weg, zwischen 32-Bit- und 64-Bit-DLLs zu kommunizieren, ist einen COM-Server zu schreiben, die die Kommunikation verwaltet (lies: wickeln entweder die Anwendungen Anrufe oder die 64-Bit-Treiber Antworten). Zwischen

Eine Sache, die zurück kam, um mich zu beißen: Als ich diesen COM-Server geschrieben (ja, ich hatte zu vielen schlaflosen Nächte zu ertragen, bevor ich kam diesen Trick kennen) ich nur gebaut, um die 32-Bit-Version der ( automatisch generiert) Proxy / Stub-DLL. Ein weiterer Anfall von schlaflosen Nächten folgte, bevor ich kam von der Lösung kennen: Erstellen Sie die Proxy / Stub-DLL für 32-Bit- und 64-Bit. Die 32-Bit-Seite befasst sich mit der 32-Bit-Seite (in Ihrem Fall die Anwendung) und die 64-Bit mit der 64-Bit-Seite (der Fahrer). COM verwaltet, wie die differnt Versionen des Proxy / Stub miteinander reden. Und oh, tun Sie den Server auf Ihrem System registriert bekommen. Einfach richtig?

ich glaube, der ganze Sinn eines Fahrers zu abstrahieren die tatsächlich Funktionsweise der Hardware ist und eine gemeinsame Schnittstelle zur Software präsentieren. In diesem Fall muss der PCIe-Treiber 64-Bit sein, so dass es als go-between für Windows und die Hardware handeln kann, aber ich würde denken, dass eine 32-Bit-Anwendung dann das Gerät ohne Probleme überhaupt zugreifen konnte.

Was von dieser Unverträglichkeit Sie lesen gemeint ist, dass 32- und 64-Bit-Baugruppen nicht Teil der gleichen Anwendung sein kann - eine Anwendung, muss entweder das eine oder das andere Ziel, wenn auch 32-Bit-Anwendung wird im Allgemeinen gut laufen unter Windows x64 mit WoW64, die nur als Übersetzer fungiert.

Sind Sie erleben derzeit Probleme, oder fragen Sie nur hypothetisch?

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