Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dll

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
20.01.2004, 11:22 Uhr
~Dirk23
Gast


Hi,

ich habe jetzt schon in mehreren Dlls folgendes Konstrukt gesehen.


Code:
#ifdef TEST_EXPORTS
#define TEST_DLL __declspec (dllexport)
#else
#define TEST_DLL __declspec (dllimport)
#endif



Was genau macht dieses Konstrukt. Ich verstehe es einfach nicht. Mit dllexport wird eine Funktion oder Klasse export, d.h. nach außen sichtbar gemacht. Ich verstehe das jetzt so, dass immer wenn ich vor eine Funktion ab jetzt TEST_DLL schreibe, diese dann exportiert wird.
Aber was macht dieses dllimport? Das ist mein Problem. Ich habe gelesen, dass mit Hilfe dieses dllimport dann eine exportierte Funktion verwendet werden kann. Aber wozu brauche ich einen Import innerhalb einer Dll?
Außerdem frage ich mich überhaupt, wozu ich diesen Importbefehl brauche, denn eine Funktion zu importieren, klappt doch eigentlich auch, wenn man ganz einfach die Funktion aufruft, ohne irgendetwas vor die Funktion zu schreiben.

Naja, ziemliches Chaos gerade in meinem Kopf. Ich hoffe, dass ihr mir helfen könnt das Geheimnis dieses Konstrukts zu lüften.

Danke schon mal im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2004, 11:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das konstukt kannst du benutzen wenn du nur einen header für deine dll basteln willlst...

an sonsten brauchst du einen header um deine dll zu erstellen und einen um sie später verwenden zu können...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.01.2004, 11:32 Uhr
~Dirk23
Gast


Ok, danke. Das Prinzip dieses Konstrukts ist mir nun klar. Aber dennoch bringe ich es nicht in Zusammenhang mit dem Quellcode. Ich weiss halt nun, wenn ich so etwas sehe, dass man damit verhindern kann, dass man 2 Headerfiles braucht für die DLL.

Kannst du es bitte irgendwie noch anhand des Codes Zeile für Zeile erklären?
Oder noch etwas ausführlicher warum das so ist.

Achso, und kurz noch eine Frage:
Wenn ich ein DLL-Projekt geöffnet habe. Wie erkenne ich dann am schnellsten, was für Funktionen bzw. Klassen ich aus dieser DLL von meiner Anwendung aus aufrufen kann?

Vielen Dank schon mal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.01.2004, 11:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na mit dem konstukt machst du das vermutlich so

C++:
#define TEST_EXPORTS
vor dem konstrukt wenn du eine dll erstellen willst

C++:
//#define TEST_EXPORTS
vor dem konstrukt wenn du die dll verwenden willst...

Ich verwende das wenn so weil ich keine Lust habe das immer auszukommentieren...


C++:
#ifdef __DLL__
    #define DLL_TYP __declspec(dllexport)
#else
    #define DLL_TYP __declspec(dllimport)
#endif


der kompiler sollte __DLL__ eigentlich automatisch kennen (bei mir jedenfalls funzt das) und weiss so ob er gerade ne dll erstellen soll oder verwenden...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.01.2004, 15:30 Uhr
(un)wissender
Niveauwart


Weiß jemand, wie man mit C++-Klassen eine dll machen kann?
Vielleicht ein sehr kleines Bsp?
(Ich weiß, dass das Compilerabhängig ist, trotzdem)
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.01.2004, 16:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja:

Der Header:

C++:
/* sample.h */
#ifndef SAMPLE_H_INCLUDED
#define SAMPLE_H_INCLUDED


#ifdef _WIN32
#    ifdef IMPLEMENTING_SAMPLE
#        define SAMPLE_PREFIX __declspec(dllexport)
#    else
#        define SAMPLE_PREFIX __declspec(dllimport)
#    endif
#else
#    define SAMPLE_PREFIX
#endif


class SAMPLE_PREFIX IAmAClass
{
public:
      virtual void print();
};

#endif



Die Implementierung:

C++:
/* sample.cpp */
#define IMPLEMENTING_SAMPLE

#include "sample.h"
//#include "bill_rulez_and_makes_things_easy.h"
// ^^ :ironie: ^^

void IAmAClass::print()
{
    std::cerr<<"I Am A Class In A DLL"<<std::endl;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 20.01.2004 um 16:07 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.01.2004, 16:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Weitere Infos bzgl Sinn und Unsinn der DLL Besonderheiten unter Windows: www.fun-soft.de/showtopic.php?threadid=4247
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.01.2004, 16:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
was genau ist daran jetzt compilerabhängig?
frisst das nur der vc++ oder auch andere...?


Bearbeitung:

ok frage hat sich erübrigt hab den von dir vorgeschlagenen Thread gelesen und ansatzweise verstanden


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 20.01.2004 um 16:14 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.01.2004, 16:16 Uhr
virtual
Sexiest Bit alive
(Operator)


@Windalf
Es fressen möglicherweise auch der BCB, allerdings braucht zB der gcc Port unter Windows den ganzen kram nicht.
Am in Post 006 erwähnten Thread wird alles auseinandergenommen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.01.2004, 20:23 Uhr
~Dirk23
Gast


So, ich habe jetzt hier mal alle Threads zu dem Thema dll gelesen und auch schon einiges erfahren. Jetzt habe ich allerdings noch eine Frage.

Wenn ich ein großes Dll-Projekt im Visual Studio vor mir habe. Wie kann ich dann auf einen Blick sehen, welche Funktionen und Klassen exportiert sind, d.h. ich von meiner Anwendung aus aufrufen kann?
Geht das? Bisher schaue ich nämlich immer alle Headerdateien durch und schaue dann ob dort eine exportierte Klasse oder exportierte Funktionen drin sind.

Vielen Dank im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: