Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

1

03.01.2010, 23:10

Dlls und Libs erzeugen - Tutorial o.ä. gesucht!

Hallo!
Ich möchte mein Framework in eine Dll packen, sodass man - wie bei der TriBase oder anderen Engines - nur die Lib linken und die Header includieren muss, um das Framework zu verwenden. So etwas habe ich noch nie gemacht und ich wünsche mir ein paar Informationen, wie ich das mit VC++ Express 2008 machen kann.

danke schon mal im voraus ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

03.01.2010, 23:27

Die gibts hier irgendwo. Such mal bei den Tutorials. ;)

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

3

03.01.2010, 23:37

Oh, sry... habe ich übersehen^^

Denke mal, ich hab mich bei der Suche vertippt^^ es kam nix nützliches bei rum...

Aber ich habe noch eine Frage: wie klappt es mit Klassen und überladenen Funktionen? Genauso?

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

4

04.01.2010, 10:05

Wieso nicht ?
Siehst ja bei der TriBase Engine, da hats ja auch jede menge klassen.

class DEIN_MAKRO deineKlasse
{
};

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

5

04.01.2010, 10:30

OK, thx ;)

als ich es mal ausprobiert habe, kam die folgende Warnung:

Zitat

d:\benny\cpp\visualcpp\dlltest\dlltest\dlltest.cpp(10) : warning C4273: 'message': Inkonsistente DLL-Bindung.
d:\benny\cpp\visualcpp\dlltest\dlltest\dlltest.hpp(7): Siehe vorherige Definition von 'message'


Was mache ich falsch? Google hat nix gebracht :(

DllTest.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include "DllTest.hpp"
#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved) 
{ 
  return TRUE; 
} 

void message() 
{ 
   MessageBoxW(0, L"Dies ist eine Nachricht", L"Information", MB_ICONINFORMATION | MB_OK); 
} 


DllTest.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
#ifdef DLL_EXPORTS 
#define DLL __declspec(dllexport) 
#else 
#define DLL __declspec(dllimport) 
#endif

void DLL message(); 


mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

6

04.01.2010, 10:57

C-/C++-Quelltext

1
void DLL message()

zu

C-/C++-Quelltext

1
DLL void message ()

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

7

04.01.2010, 10:58

Nö, das wars auch nicht :(
Der Fehler bleibt...
Danke dennoch, E122 ;)
mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

8

04.01.2010, 11:04

Ich hab den Fehler...

C-/C++-Quelltext

1
#ifdef DLLTEST_EXPORTS
statt

C-/C++-Quelltext

1
#ifdef DLL_EXPORTS
:roll:

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

9

04.01.2010, 12:54

Mmh... Nochmal ich...

Hat alles wunderbar geklappt, aber bei meiner Klasse kommt eine Warnung:

Zitat

1>d:\benny\cpp\visualcpp\dlltest\dlltest\DllTest.hpp(17) : warning C4091: '__declspec(dllexport)': Ignoriert auf der linken Seite von 'CRaumschiff', wenn keine Variable deklariert wurde


Die Datei DllTest.hpp nochmal:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifdef DLLTEST_EXPORTS 
#define DLL __declspec(dllexport) 
#else
#define DLL __declspec(dllimport) 
#endif

DLL void message(); 

DLL class CRaumschiff
{
public:
    CRaumschiff();
    void Flieg();
    void SetI(int n);
private:
    int i;
};


EDIT: Hat sich geklärt... wenn man DLL und class vertauscht, klappt es...

Wieso ist es bei den Funktionen Genau andersherum? ich meine:

C-/C++-Quelltext

1
2
DLL void message();
class DLL CRaumschiff


Danke ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

04.01.2010, 17:05

Zitat von »"CBenni::O"«

Ich hab den Fehler...

C-/C++-Quelltext

1
#ifdef DLLTEST_EXPORTS
statt

C-/C++-Quelltext

1
#ifdef DLL_EXPORTS
:roll:

mfg CBenni::O


Der eigentliche Fehler war, das du DLL_EXPORTS nicht definiert hast. Was da steht ist nämlich vollkommen egal, wichtig ist, dass das Makro definiert ist wenn etwas exportiert werden soll. PROJEKTNAME_EXPORTS ist bei Visual Studio, pro Dll-Projekt, einfach nur standardmäßig definiert.

Zitat von »"CBenni::O"«

Mmh... Nochmal ich...

Hat alles wunderbar geklappt, aber bei meiner Klasse kommt eine Warnung:

Zitat

1>d:\benny\cpp\visualcpp\dlltest\dlltest\DllTest.hpp(17) : warning C4091: '__declspec(dllexport)': Ignoriert auf der linken Seite von 'CRaumschiff', wenn keine Variable deklariert wurde


Die Datei DllTest.hpp nochmal:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifdef DLLTEST_EXPORTS 
#define DLL __declspec(dllexport) 
#else
#define DLL __declspec(dllimport) 
#endif

DLL void message(); 

DLL class CRaumschiff
{
public:
    CRaumschiff();
    void Flieg();
    void SetI(int n);
private:
    int i;
};


EDIT: Hat sich geklärt... wenn man DLL und class vertauscht, klappt es...


Steht ja auch so in der Dokumentation: http://msdn.microsoft.com/de-de/library/a90k134d%28VS.80%29.aspx

Zitat von »"CBenni::O"«


Wieso ist es bei den Funktionen Genau andersherum? ich meine:

C-/C++-Quelltext

1
2
DLL void message();
class DLL CRaumschiff


Danke ;)

mfg CBenni::O


Weil __declspec(dllexport/dllimport) vorgestellt ein Objekt der Klasse XYZ exportieren würde. Daher auch die Warnung:

C-/C++-Quelltext

1
2
3
4
__declspec(dllexport) class foo {}; // wenig sinnvoll

__declspec(dllexport) class foo {} x; // exportiert 'x'

class __declspec(dllexport) foo {}; // exportiert das Interface (was zu Einschränkungen führt)

__declspec(dllexport) void message(); // exportiert die Funktion 'message'

Werbeanzeige