Ich habe eine DLL, die eine Reihe von Funktionen verfügbar macht, und ich möchte eine doppelte DLL mit demselben Namen erstellen, die genau dieselben Funktionen verfügbar macht, jedoch mit meiner eigenen Implementierung jeder Funktion.
In diesem Fall werden die Funktionen nichts tun, da der Zweck darin besteht, die Funktionalität für Unit-Tests auszuprobieren.
Ich habe mich nur gefragt, ob es Tools gibt, die eine vorhandene DLL nehmen und ein neues C++-Projekt (idealerweise Visual C++) erstellen können, das dieselbe Schnittstelle verfügbar macht.
Ich könnte es manuell tun (mit Dependency Walker , auch bekannt als Depends.exe , um die exponierten Funktionen und Parameter zu sehen), aber es wäre viel einfacher, wenn es ein automatisiertes Tool dafür gäbe.
Was Sie brauchen, ist eigentlich eine sogenannte "Proxy-DLL".
Es gibt einige Lösungen im Netz. Mein Favorit ist ein auf Habrahabr veröffentlichtes AutoIt-Skript ( russisch, 1. Link binär, 2. src), das ein VisualStudio 2008/2010-Projekt für jede DLL erstellt. Alle Funktionen werden an die Original-DLL weitergeleitet, einige davon werden Sie wahrscheinlich gerne überschreiben.
Ich denke, es sollte nicht unglaublich schwierig sein, etwas Scripting zu verwenden und das zu erledigen. Ich beschreibe hier keine vollständige Lösung, eher eine Skizze (da ich keine Entwicklung unter Windows mache), aber:
sed
oder grep
+ verwendencut
echo
und einer Vorlage erfolgen, wobei einige Variablen für das ersetzt werden, was Sie als Signatur erhalten haben. Und bevor Sie irgendetwas anderes hineinschreiben, schreiben Sie den Anfangsheader, den Sie wollen.Das ist der Code selbst. Was die MSVC-Projektdatei betrifft, müssen Sie selbst herausfinden, wie Sie sie generieren.
Mawg sagt, Monica wieder einzusetzen