Funktion weitergeben(aber Quellcode bitte nicht sichtbar)



  • Nabend

    Ich habe myfunc.h und myfunc.cpp

    Kann man die myfunc.cpp vielleicht ohne "offenen" Quelltext, also verdeckt, an eine andere Person weitergeben, aber das er trotzdem die enthaltenen Funktionen normal verwenden kann?

    Benutze Visual C++ 2008 Express Edition - falls das irgentwie als dll oder lib geht, bitte kurz erklären wie ich sowas erstellen kann.

    Danke



  • Hy

    Am einfachsten erstellst du ne ClassLibrary mit VC++, definierst in der Header-Datei diesen Code:

    #ifdef _EXPORTS
    #define EXPORT_API __declspec( dllexport )
    #else
    #define EXPORT_API __declspec( dllimport )
    #endif
    

    In deinem Projekt was die Dll-erstellt, musst du "_EXPORTS" definieren, dem anderen gibst du die Dll + die Header-Datei, dieser muss diese einbinden und die Dll mit linken. Und diesmal _NICHT_ das "_EXPORTS" definieren.

    Mfg Marco



  • verdammt, das hört sich schonmul gut an - aber ich krieg das noch nich ganz gebacken.

    Habe jetzt ein neues Projekt(namens test) als "Klassenbibliothek" erstellt. Jetzt sind allerdings schon drei Headerdateien(resource.h, stdafx.h, test.h) und drei cpp Dateien(Assemblyinfo.cpp, stdafx.cpp, test.cpp) vorhanden. Soll ich jetzt

    #ifdef _EXPORTS 
    #define EXPORT_API __declspec( dllexport ) 
    #else 
    #define EXPORT_API __declspec( dllimport ) 
    #endif
    

    in test.h kopieren?

    "In deinem Projekt was die Dll-erstellt, musst du "_EXPORTS" definieren" das versteh ich irgentwie noch nicht, vllt liegts an der Uhrzeit 😞



  • Auf MSDN ist relativ gut erklärt, wie man eine DLL oder statische Bibliothek (LIB) erstellen kann...



  • toll schrieb:

    verdammt, das hört sich schonmul gut an - aber ich krieg das noch nich ganz gebacken.

    Habe jetzt ein neues Projekt(namens test) als "Klassenbibliothek" erstellt. Jetzt sind allerdings schon drei Headerdateien(resource.h, stdafx.h, test.h) und drei cpp Dateien(Assemblyinfo.cpp, stdafx.cpp, test.cpp) vorhanden. Soll ich jetzt

    #ifdef _EXPORTS 
    #define EXPORT_API __declspec( dllexport ) 
    #else 
    #define EXPORT_API __declspec( dllimport ) 
    #endif
    

    in test.h kopieren?

    "In deinem Projekt was die Dll-erstellt, musst du "_EXPORTS" definieren" das versteh ich irgentwie noch nicht, vllt liegts an der Uhrzeit 😞

    Kannst du in die test.h oder in die stdafx.h kopieren welche dir besser gefällt.

    Mit definieren meinte ich nur das du dem Präprozessor das "_EXPORTS" bekannt gibst. Entweder über die Projekteinstellungen oder indem du vor dem Code ein "#define _EXPORTS" schreibst.

    Mfg Marco



  • dazu würde ich auch mal eine frage stellen wollen
    ich nutze auch diesen codeabschnitt, bin aber vom kompilieren der kompletten dll noch meilenweit entfernt...

    #ifdef _EXPORTS
    #define EXPORT_API __declspec( dllexport )
    #else
    #define EXPORT_API __declspec( dllimport )
    #endif
    

    _EXPORTS muss vom anwender noch definiert werden, richtig?
    aber wozu dient dieser code genau, ich mein ich hab den auch empfohlen bekommen.
    Die art und weise wie dieser codeblock funktioniert, ist mir schon klar....

    aber reicht ein

    #define EXPORT_API __declspec( dllexport )
    

    für exporte und ein

    #define IMPORT_API __declspec( dllimport )
    

    für importe denn nicht aus?

    man müsste dann halt einfach nur jeweils das richtige davorschreiben....

    (muss dazusagen, bei mir kommen beide varianten vor, ich muss importieren und exportieren)

    ich bin ehrlich, so richtig verstehe ich den sinn und zweck des abschnitts nicht, ausser daß die einzige bedingung das #define _EXPORTS ist....



  • #ifdef _EXPORTS 
    #define EXPORT_API __declspec( dllexport ) 
    #else 
    #define EXPORT_API __declspec( dllimport ) 
    #endif
    

    Der Witz ist ja gerade, dass in den Projekt Settings der DLL (von da werden Dinge exportiert) _EXPORTS definiert wird. Im Projekt desjengigen, der die DLL benutzt muss (darf) _EXPORTS nicht definiert sein (er muss nur das *.h inkl.).

    DLL -> export
    Benutzer -> import

    Simon



  • ahhhh kapiert....

    (das verständnisproblem lag wohl eher daran, daß ich die dll mit anderen sprachen nutzen werde, und da spielt das keine rolle, also da nehm ich ja keine header datei....)


Anmelden zum Antworten