Frage zu Lib



  • Hallo Forum,

    ich habe ein C++ Lib Projekt im VS6 erstellt. Dieses Projekt soll einem Kunden zur Verfügung gestellt werden. Dazu muß ich die Lib und die Klassen Header weitergeben. Ich möchte aber nicht das der Kunde erfährt welche Privaten/Protected Member Funktionen + Variablen meine Klassen haben.

    1. Darf ich Variablen/Funktionen so einfach aus den Klassen Headern herauslöschen? Ich habe das probeweise gemacht und ein neues Testprojekt mit den beschnittenen Headern erstellt wo ich dann die vollständige Lib eingebunden habe. Es hat funktioniert... kann ich das dann immer so machen? Die Klasse einfach beschneiden... der Kompiler findet die verbliebenden Funktionen im Header anhand dieser "?x@aa@@QAEHXZ" Syntax in der Lib?

    2. Wenn ich eine Lib aus mehreren Klassen erstelle, dann diese Lib in ein neues Projekt einbinde, in diesem neuen Projekt aber nur eine Klasse benutze, wird dann die komplette Lib einkompiliert oder nur die eine benötigte Klasse?

    3. Kennt jemand einen guten Link zu Libs? Was man beachten muß, ... im Web scheint es nichts zu geben. Ich habe ein DLL Projekt einfach dadurch in eine Lib umgewandelt indem ich die Sourcen in einem neuen Lib Projekt geladen habe. Ist das schon alles?

    Vielen Dank im voraus

    Martin



  • lib Hersteller schrieb:

    1. Darf ich Variablen/Funktionen so einfach aus den Klassen Headern herauslöschen?

    Nein, das darfst Du nicht.

    lib Hersteller schrieb:

    Es hat funktioniert...

    Zufall... dann hast Du nicht so viele virtuelle Funktionen oder private Member zufällig passend stehen...

    lib Hersteller schrieb:

    2. Wenn ich eine Lib aus mehreren Klassen erstelle, dann diese Lib in ein neues Projekt einbinde, in diesem neuen Projekt aber nur eine Klasse benutze, wird dann die komplette Lib einkompiliert oder nur die eine benötigte Klasse?

    Der MS Compiler bindet immer nur dass ein, was benötigt wird.



  • Vielen Dank für Auskunft 🙂
    Dann maß ich wohl Wrapper für meine Klassen bauen 😞



  • @1: Der Compiler findet die Funktionen etc anhand der Angaben im Header. Das heißt, eigentlich findet er überhaupt nichts, sondern sagt nur dem Linker, daß er diese Funktionen suchen soll. Und wenn du da etwas umbaust, kann es Probleme geben, weil der Compiler die Namen anders ergänzt als du es erwartest (ganz davon abgesehen, daß auch das Layout der Klasse nicht mehr zu deine Library passt).


  • Mod

    Schau mal nach "C++ Private implementation" oder kurz Pimpl...
    Da erfährst Du mehr.

    Wenn ich eine Library baue, dann hat diese immer nur pure virtuelle Interfaces und entsprechende Factory Funktionen (ähnlich wie COM es macht). Dadurch werden alle Implementierungsdetails verborgen.

    Dito solltest Du daruf achten keine CString oder andere spezielle Klassen zu returnieren, außer Du willst eine MFC Extension DLL bauen.



  • Pimpl hört sich gut an 🙂

    So wie es in diesem Beispiel beschrieben wird ist es aber nichts anders als ein etwas komplizierterer Wrapper?
    http://www.gamedev.net/reference/articles/article1794.asp

    Methoden und Variablen die nicht sichtbar sein sollen werden werden in die Pimpl Klasse ausgelagert. Die Pimpl Klasse wir im Konstruktor der nach außen sichtbaren Klasse erstellt. In den Methoden der öffentlichen Klasse wird dann einfach auf die Methoden der Pimpl Klasse zugegriffen. Eigentlich nichts weiter als ein Wrapper?


Anmelden zum Antworten