DLL Proxy?
-
Moinsens!
Ein neues Projekt, eine neue Herausforderung

Ich (seit 6 Jahren NUR Java) soll mal wieder C++ anfassen.
Folgende Frage: Applikation X (eingekauft, kein Source verfügbar, wird leider nicht mehr gewartet) kommuniziert mittels einer DLL (Bestandteil von
mit Applikation Y. Diese Kommunikation soll optimiert werden (Caching, etc.).Header der DLL ist vorhanden, mehr nicht. Ist es möglich, einen Proxy generieren zu lassen, mit leeren functions, die sämtliche Funktionsaufrufe nur an die Original-DLL delegieren, so dass ich zunächst einmal Schritt für Schritt herausfinden kann, welche Bestandteile der DLL von X verwendet werden, um dann Zusatzfunktionalität zu implementieren?
Möglich oder unmöglich oder Lebensaufgabe?
Würde mich über Antworten / Empfehlungen RIESIG freuen

-
Möglich und nicht allzu kompliziert. Ich wollte das auch schon mal machen. Ich weiß nicht, ob es funktioniert, wenn du den Filenamen der Original-DLL einfach änderst (das musst du schließlich, weil deine neue DLL ja an Stelle der alten treten soll), aber das lässt sich schnell rausfinden. Aber sonst musst du halt einfach nur sämtliche Funktionen mit GetProcAddress reinladen und die Aufrufe weiterleiten. Ob du diesen Code manuell tippst oder dir einen Automatisierer schreibst, hängt wohl vom Umfang des Headers ab. Und bete, dass keine "undokumentierten" Funktionen verwendet werden, die nicht im Header drinnenstehen.
-
Besten Dank erst einmal für die Antwort.
Die DLL stammt von einem anderen Hersteller als die Applikation X, daher sehe ich undokumentierten Funktionsaufrufen gelassen entgegen, wenn ich genau den gleichen Header verwende und alles, wirklich alles erst einmal schlicht durchreiche und mitlogge.
Der Plan war, die ursprüngliche DLL umzubenennen (welche Seiteneffekte das haben mag, lasse ich jetzt erst einmal offen) und meiner neuen DLL diesen ursprünglichen Namen zu verpassen.
Gibt es für so etwas Automatisierer? Sozusagen einen Proxy-Stub (wo alles schlicht durchgereicht wird) automatisch zu generieren? Es sind nämlich VIELE functions...
bye!
-
Den Automatisierer musst du sicher selber schreiben.
Zu den undokumentierten Funktionen: Wenn du nicht weißt, wie viele Parameter sie haben, wirst du auch Probleme haben, sie durchzureichen.
-
Zu den undokumentierten Funktionen: Wenn du nicht weißt, wie viele Parameter sie haben, wirst du auch Probleme haben, sie durchzureichen.
Ich bin mir sicher, dass meine Altanwendung auch NUR das header-File zur Verfügung hatte, d.h. andere functions als die im header werden sicherlich nicht ausgeführt. Ich nehme diesen Funktionsaufruf entgegen (function x mit parametern a,b,c und return value d) und reiche den an die Original-DLL, gleiche function, gleiche parameter durch.
Vielleicht habe ich etwas vergessen? Aber undokumentierte functions in der DLL sollten mich dann doch eigentlich nicht mehr interessieren, oder?
-
Ich denke, du wirst wohl nicht drum rum kommen, alle von außen verwendeten (exportierten) Funktionen in deiner DLL ebenfalls anzulegen und zu exportieren und dort dann eben wieder die originale Funktion aus der anderen DLL aufzurufen.
Wenn es wirklich sehr viele Funktionen sind könntest du dir einen kleinen Parser für die Header-Datei erstellen, der die daraus dann den entsprechenden Code (Anlegen der Funktion in deiner DLL und Aufruf der ursprünglichen Funktion) erstellt - ich denke, das meinte Ringding mit Automatisierer?!