Brauche Hilfe bei einem VC++ 6 Projekt



  • Hi,

    Ich habe vor einiger Zeit den Source Code eines Tools gefunden, das in Visual C++ 6.0 geschrieben wurde, eine MFC Application.
    Der Code wurde natürlich nicht von mir geschrieben sondern von irgendwelchen Entwicklern des Spieles "Re-Volt" vor ca 15+ Jahren 😛

    Das Tool selbst sollte in der Lage sein, zahlreiche spieleigene Dateiformate in etwas lesbares zu konvertieren und wäre demnach von großem Interesse für mich. Allerdings ist nur der Source Code verfügbar, keine kompilierten Dateien und auch die original Entwickler (zumindest die, die ich gefunden und erreicht habe), haben nichts mehr.

    Ich habe selbst versucht es zu kompilieren mit VC++6 und es gelang sogar einwandfrei. Jedoch scheint er zumindest eine .dll Datei zu vermissen ohne die er das Tool nicht ausführen kann.
    Ich habe den Verdacht, dass man mit demselben Source Code auch in der Lage sein müsste die .dll zu kompilieren. Nachdem ich allerdings keinerlei Erfahrung mit MFC und .dll Kompilationen habe, kann ich das nicht genau sagen.

    Ich hatte gehofft, dass sich jemand von euch der erfahrener in solchen Dingen ist als ich, sich dazu erbarmen könnte das Projekt anzuschauen und mir zumindest sagen kann, ob es möglich ist das Tool mit den vorhandenen Dateien zum laufen zu bringen oder ob da nicht doch Dateien fehlen?

    Nachdem der Code für das Tool im Prinzip frei verfügbar ist (es hat zumindest noch keine Beschwerde bei den existierenden Download Links gegeben) und das Tool auch schon so alt ist, dass sich wahrscheinlich sowieso keiner daran erinnert, denke ich, dass es kein Problem ist wenn ich hier einen Download Link bereit stelle.

    Wenn Interesse besteht, bitte antworten und ich werde einen Download Link hier rein editieren (sofern das nicht verboten ist) 🙂



  • Zapeth schrieb:

    Ich habe den Verdacht, dass man mit demselben Source Code auch in der Lage sein müsste die .dll zu kompilieren.

    Wie begründest du denn deinen Verdacht? Bauchgefühl? 😉

    Ich würde mal vermuten, wenn in der Projektmappe kein Projekt ist, dass die geforderte DLL erzeugt, hast du Pech und musst sie woanders auftreiben. Gibt es denn mehrere Projekte in der Mappe? Hast du alle erstellt?



  • Wenn die dll-Sourcen vorhanden sind, müssen die doch erst in der Projektmappe importiert werden, damit sie zu sehen sind, oder?
    Irgendwie
    Menüleiste
    Projekt ➡ Projekt in den Arbeitsbereich einfügen ➡ *.dsp

    Dann noch...
    Das dll-Projekt als aktives Projekt festlegen und die Ausgabepfade festlegen:
    Projekt ➡ Einstellungen ➡ Registerkarte Allgemein
    ...für Debug und Release...

    Dann noch auf der Registerkarte Linker den Namen der dll eintragen, also unter welchem Dateinamen die dll in den oben angegebenen Ausgabepfaden erstellt werden soll.

    Dann am besten ein RebuildAll machen:
    Erstellen ➡ Alles neu erstellen ➡ dll ind lib sollten vorhanden sein.

    Dann wieder das exe-Projekt als aktives Projekt festlegen und unter
    Projekt ➡ Einstellungen ➡ Registerkarte Linker:
    Objekt-/Bibliothek-Module: ergänzen:
    Pfade und Dateinamen der *.lib für Debug und Release

    ...wenn ich mich nach so langer Zeit recht erinnere 😃



  • Ohne die Quelltexte wird man wohl nur raten können.

    Es wäre also erforderlich einen Download-Link zu posten.
    Dafür gibts den URL Button ...



  • _matze schrieb:

    Wie begründest du denn deinen Verdacht? Bauchgefühl? 😉

    Ich würde mal vermuten, wenn in der Projektmappe kein Projekt ist, dass die geforderte DLL erzeugt, hast du Pech und musst sie woanders auftreiben. Gibt es denn mehrere Projekte in der Mappe? Hast du alle erstellt?

    Nein, für dieses Tool habe ich nur eine Projektdatei vorgefunden, keinen Workspace (oder Projektmappe).

    Ich habe den Verdacht deshalb weil
    1. eine gleichnamige '.lib' Datei wie die geforderte '.dll' im Projekt ist und
    2. weil im Sourcecode zahlreiche defines vorzufinden sind wie dieser hier

    #ifdef	build_jcclass_dll
    #define JCCLASS_DLL __declspec(dllexport)
    #else
    #define JCCLASS_DLL __declspec(dllimport)
    #endif
    

    Natürlich habe ich mich auf die Suche nach derartigen Ausdrücken gemacht (habe ja wie gesagt keinerlei Erfahrung mit '.dll' "Erstellung"), allerdings haben die meisten Erklärungen dazu mir auch nicht wirklich weitergeholfen (bzw haben sie mir keine wirkliche Antwort auf meine Frage liefern können).
    Ich habe auch probiert das Projekt zu kompilieren mit "build_jcclass_dll". Zwar hatte ich hier anfangs ein paar Linker Errors (wobei ich nicht weiß warum, der Code hat Ok ausgeschaut) aber ich habe es dann doch noch geschafft diese zu beseitigen.
    Im Endeffekt hat er mir eine '.lib' und eine '.exp' erstellt (gleicher Name wie das Projekt) von denen ich nicht weiß was sie mir bringen sollen.

    Hier zb steht

    The dllexport and dllimport storage-class attributes are Microsoft-specific extensions to the C and C++ languages. You can use them to export and import functions, data, and objects to or from a DLL.

    Allerdings habe ich nicht wirklich nähere Informationen (bzw Beispiele) darüber gefunden, wie das geht (oder was man dafür braucht).

    isabeau schrieb:

    Wenn die dll-Sourcen vorhanden sind, müssen die doch erst in der Projektmappe importiert werden, damit sie zu sehen sind, oder?

    Das Problem ist ja, dass die '.dll' Source nicht dabei ist/war (zumindest sieht es nicht danach aus), es ist nur eine gleichnamige '.lib' dabei dabei (recht groß sogar).

    merano schrieb:

    Es wäre also erforderlich einen Download-Link zu posten.
    Dafür gibts den URL Button ...

    Ich wollte mich vorher vergewissern ob es auch in Ordnung geht die hier zu posten, hätte ja sein können, dass sowas hier nicht gerne gesehen wird 😉
    Hier bitte.



  • Hier ist einer von vielen Beiträgen zum Thema dll/lib einbinden:
    http://www.c-plusplus.net/forum/299144



  • Die lib ist bereits eingebunden. Ohne die dll kann ich das kompilierte Programm trotzdem nicht starten.



  • Zapeth schrieb:

    2. weil im Sourcecode zahlreiche defines vorzufinden sind wie dieser hier

    #ifdef	build_jcclass_dll
    #define JCCLASS_DLL __declspec(dllexport)
    #else
    #define JCCLASS_DLL __declspec(dllimport)
    #endif
    

    Tauchen diese defines (bzw. die Klassen, die sie verwenden) nur in Headerdateien (*.h) auf ?

    Für sich alleine sind die noch kein Zeichen dafür, dass auch die DLL mit dem Sourcecode erstellt werden kann. Es ist nicht unüblich für ein DLL-Projekt und die späteren Verwender eine gemeinsame Headerdatei zu erstellen. Die enthält dann entsprechende defines zum Umschalten zwischen Erzeugen und Verwenden.

    Nur wenn sich zu den Klassen, die diese defines verwenden, auch Implementierungen finden (in *.cpp Dateien), hätte man eine Chance, die DLL selbst zu erzeugen.



  • Ok, zahlreiche waren es doch nicht, nur 3 (ich dachte es wären mehr) und die waren alle in Header Dateien.

    Soll also heißen ohne entsprechenden zusätzlichen Source Code ist es nicht möglich die dll zu erstellen? 😞

    Ich hatte das schon befürchtet, wollte aber doch Gewissheit haben.



  • Es müsste schon etwas in einer Headerdatei sein in der Form

    class JCCLASS_DLL Dings
    {
      // ...
    
      void Bums();
    };
    

    und in einer cpp-Datei sowas

    void Dings::Bums()
    {
      // ...
    }
    

    Sonst gehören diese Header, genau wie die Lib, nur zum Zubehör zur Nutzung der DLL ...



  • nn schrieb:

    Es müsste schon etwas in einer Headerdatei sein in der Form

    Im Code steht es auch genauso, allerdings scheint das hier nicht der Fall zu sein

    nn schrieb:

    und in einer cpp-Datei sowas

    Also schätze ich mal, dass man da nichts ohne die fehlenden Dateien machen kann?



  • Zapeth schrieb:

    Im Code steht es auch genauso, allerdings scheint das hier nicht der Fall zu sein

    Wie meinst Du das ? Wo steht es und wo nicht ?

    Kannst Du mal ein paar Zeilen posten, wo dieses JCCLASS_DLL verwendet wird ?

    Zapeth schrieb:

    Also schätze ich mal, dass man da nichts ohne die fehlenden Dateien machen
    kann?

    Wenn wir nicht noch weitere Entdeckungen machen, wohl nicht.



  • Ich meinte genau in dem Format, das du beschrieben hast. Hier ein Beispielauszug aus dem Code:

    class JCCLASS_DLL PS_Polygon
    {
    	PS_FloatUVOrigin m_Origin;
    	PS_FloatUVArray  m_Points;
    	void SetIterator(PS_FloatUV& uv, U32 i) const;
    public:
    	void Mask(CDC* pDC, CSize& size, CSize& bmsize) const;
    	PS_Polygon(void);
    	PS_Polygon(const PS_Polygon& source);
    	void CopyFrom(const PS_Polygon& source);
    	CRect Rect(CSize size) const;
    	CRect PositiveRect(CSize size) const;
    	PS_Polygon& operator << (const PS_FloatUVOrigin& uv);
    	const PS_Polygon& operator >> (PS_FloatUVOrigin& uv) const;
    	PS_Polygon& operator << (const PS_FloatUV& uv);
    	const PS_Polygon& operator >> (PS_FloatUV& uv) const;
    	PS_Polygon& operator = (const PS_Polygon& x);
    	operator BOOL (void) const;
    	void InsertAt(U32 i, PS_FloatUV& uv);
    	void RemoveAt(U32 i);
    	S32  FindUV(PS_FloatUV& uv) const;
    	S32  GetNumberOfVertices(void) const { return m_Points.GetSize(); }
    	const PS_FloatUV& operator[](U32 position) const { return m_Points[position]; }
    	PS_FloatUV& operator[](U32 position) { return m_Points[position]; }
    	friend JC_Buffer& operator << (JC_Buffer& buf, PS_Polygon& p);
    	friend JC_Buffer& operator >> (JC_Buffer& buf, PS_Polygon& p);
    };
    

    Zu den entsprechenden Funktionen die hier drinnenstehen konnte ich jedoch keine weiteren Informationen finden, also sie stehen in keiner .cpp oder so drinnen.



  • Zu Header und lib fehlt dir einfach die zugehörige DLL, die die Implementation enthält. Wenn du die nicht auftreiben kannst, wird das wohl nichts.



  • Tja, dann wars das wohl. Schade ich hätte das Tool wirklich gut gebrauchen können.

    Naja egal, danke trotzdem für eure Hilfe, jetzt habe ich wenigstens Gewissheit.



  • Ok, zahlreiche waren es doch nicht, nur 3 (ich dachte es wären mehr) und die waren alle in Header Dateien.

    Soll also heißen ohne entsprechenden zusätzlichen Source Code ist es nicht möglich die dll zu erstelle


Anmelden zum Antworten